组合多个Linq-Where语句
本文关键字:语句 Linq-Where 组合 | 更新日期: 2023-09-27 18:26:08
我创建了一个函数来过滤和排序列表的内容。
这看起来有点"小",但林克并不是强项。我想知道这个功能是否可以简化,无论是从性能角度还是从疲劳角度。
这是代码:
//对XML进行沙漠化以创建一类活动行
var agents = XmlHelper
.Deserialise<AgentConfigs>("~/Pingtree.xml")
.Agents
.Where(x => x.IsActive == true);
//首先获得"直接"代理商并订购
var direct = agents
.Where(x => x.IsDirect)
.OrderByDescending(x => x.MinPrice);
//第二-获得间接代理并订购
var agency = agents
.Where(x => !x.IsDirect)
.OrderBy(x => x.Priority);
//将2个子列表固定在一起,保留订单
Agents = direct.Concat(agency).ToList();
有什么想法可以改进吗?
您可以使用GroupBy
或ToLookup
来拆分两者,在这种情况下我更喜欢ToLookup
:
var activeAgentDirectLookup = XmlHelper
.Deserialise<AgentConfigs>("~/Pingtree.xml")
.Agents
.Where(x => x.IsActive == true)
.ToLookup(a => a.IsDirect);
Agents = activeAgentDirectLookup[true].OrderByDescending(x => x.MinPrice)
.Concat(activeAgentDirectLookup[false].OrderBy(x => x.Priority))
.ToList();
在这种情况下,查找类似于以bool
为关键字的字典(因此有两个可能的组)。值是IEnumerable<Agents>
,所以所有代理都是IsDirect
或!IsDirect
。这里的好处是你只需要评估一次。