当前位置:  开发笔记 > 编程语言 > 正文

结合多个Linq Where语句

如何解决《结合多个LinqWhere语句》经验,为你挑选了1个好方法。

我已经创建了一个函数来过滤和排序列表的内容.

这看起来有点"笨拙",但Linq不强.我想知道这个功能是否可以简化,无论是从性能角度还是从审慎的角度来看.

这是代码:

//反序列化XML以创建一类活动行

    var agents = XmlHelper
        .Deserialise("~/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();

有关如何改进的任何想法?



1> Tim Schmelte..:

您可以使用GroupByToLookup拆分两者,我更喜欢ToLookup这种情况:

var activeAgentDirectLookup = XmlHelper
    .Deserialise("~/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,所以所有代理都是IsDirect!IsDirect.这里的好处是你只需要评估一次.

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有