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

这个LINQ可以更高效吗?

如何解决《这个LINQ可以更高效吗?》经验,为你挑选了2个好方法。

我有一个相当复杂的linq分组,有些重复让我烦恼,但我无法减少它.有没有办法避免两次获得ID =="XYZ"的项目列表?

var example = = new GdsObservableCollection(
                items.Where(a => a.SubCategory3 != "{template}")
                     .GroupBy(item => item.SubCategory1)
                     .Select(g => new GroupedQueryResults
                                  {
                                     SubCategory = g.Key,
                                     SectionHeader = (g.Count(x => x.Id == "XYZ") > 0) ?
                                     "Category :" +  g.Where(x => x.Id == "XYZ")
                                                     .First().NewValue :
                                     "Item - " + itemNumber

...



1> Anderson Pim..:

我不会说更有效,但可以稍微小了一点,因为你可以使用内部谓词AnyFirst:

var example = new GdsObservableCollection(
            items.Where(a => a.SubCategory3 != "{template}")
                 .GroupBy(item => item.SubCategory1)
                 .Select(g => new GroupedQueryResults
                              {
                                 SubCategory = g.Key,
                                 SectionHeader = g.Any(x => x.Id == "XYZ") ?
                                 "Category :" +  g.First(x => x.Id == "XYZ").NewValue :
                                 "Item - " + itemNumber


值得一提的是,`First`不会比`Where`然后`First`更有效,但它在更少的代码中做得更好,更可读=>更好的代码.`Any` vs.`Count`更有效率

2> Ivan Stoev..:

x.Id == "XYZ"使用Where+ Select+ FirstOrDefault链结合C#null-coalescing运算符可以避免重复搜索:

SectionHeader = g
    .Where(x => x.Id == "XYZ")
    .Select(x => "Category :" +  x.NewValue)
    .FirstOrDefault() ?? "Item - " + itemNumber

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