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

Linq - 如何聚合另一个查询的结果

如何解决《Linq-如何聚合另一个查询的结果》经验,为你挑选了1个好方法。

我想在列表中获取where子句的结果,然后获取该结果集并创建一个新类型,其所有字段都是从原始查询的聚合构造的.所以给定下面的基本示例,无论如何将两个linq语句合并为一个?如果原始的地方没有行,那么它应该返回null.谢谢!

    class Foo
    {
        public int A { get; set; }
        public int B { get; set; }
    }
    List lst = GetFooList();

        var q = (from f in lst
                 where f.A > 3
                 select f).ToList();
        if (q.Count != 0)
        {
            var qq = new
            {
                MinA = q.Min(l => l.A),
                MaxB = q.Max(h => h.B),
            };
            // now do something with qq
        }

更新:对于我的情况,原始集合有很多项目,但在where子句之后,结果集非常小.多次枚举第二组应该不是问题.此外,我需要在集合上使用first和last来从这些记录中获取值.答案小组最适合我.聚合方式非常有趣,我认为还有其他用途.



1> Lucas..:

此解决方案仅对列表进行一次迭代Aggregate(),但对于空列表,它将返回种子值.顺便说一下,种子值是int.MaxValueint.MinValue因为Math.Min(int.MaxValue, C)将始终返回C并且同样Math.Max(int.MinValue, C)将始终返回C.

var b = lst.Where(f => f.A > 3)
           .Aggregate(
                  // seed, initial values
                  new
                  {
                     MinA = int.MaxValue,
                     MaxB = int.MinValue
                  },

                  // accumulator function
                  (a,f) => new
                  {
                     MinA = Math.Min(a.MinA , f.A),
                     MaxB = Math.Max(a.MaxB , f.B)
                  });

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