组合多个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();

有什么想法可以改进吗?

组合多个Linq-Where语句

您可以使用GroupByToLookup来拆分两者,在这种情况下我更喜欢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。这里的好处是你只需要评估一次。