我已经创建了一个函数来过滤和排序列表的内容.
这看起来有点"笨拙",但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();
有关如何改进的任何想法?
您可以使用GroupBy
或ToLookup
拆分两者,我更喜欢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
.这里的好处是你只需要评估一次.