我要带一个列表上的where子句的结果,然后采取这一结果集,并只创建一个新类型,有它的所有原始查询的聚集建造领域。所以,下面给出基本的例子,反正是有2个LINQ语句组合成一个?如果其中没有行,那么它应该返回null原始。谢谢!

    class Foo
    {
        public int A { get; set; }
        public int B { get; set; }
    }
    List<Foo> 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子句后的结果集是非常小的。历数在第二组几次不应该是一个问题。此外,我需要的第一个和最后使用的设置,以获得从这些记录的值。通过回答该小组将工作最适合我的。聚集的方式很有趣,我认为有另一种用法为。

有帮助吗?

解决方案

( from f in GetFooList()
  where f.A > 3
  group f by 1 into g
  let MinA=g.Min(l=>l.A)
  let MaxB=g.Max(h=>h.B)
  select new {MinA, MaxB} ).SingleOrDefault()

其他提示

此溶液与Aggregate()遍历该列表仅一次,但对于空列表它将返回的种子值。顺便说,该种子值是int.MaxValueint.MinValue因为Math.Min(int.MaxValue, C)将始终返回C和同样Math.Max(int.MinValue, 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)
                  });
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top