多对一的linq投影

时间:2011-08-24 13:11:01

标签: c# linq

如何在一个查询中写这个?

var query = this.ObjectContext.SomeCollection.
                .Where(...)
                .Select(f => new {somenumber = f.somenumber});

MyType type = new MyType()
                 {
                    Sum = query.Sum(f => f.somenumber)
                 }

2 个答案:

答案 0 :(得分:4)

由于投影中只有一个属性,因此完全不需要使用匿名类型。您可以简单地获取查询并将其包含在MyType的对象初始值设定项中。请注意,只要您不在其他地方重复使用投影(在这种情况下,您可以将其拉出外部然后重复使用),这样就可以了。

var type = new MyType {
               Sum = this.ObjectContext
                         .SomeCollection
                         .Where(SomeCondition)
                         .Select(f => f.somenumber)
                         .Sum()
           };

此外,您可以将.Select(f => f.somenumber).Sum()缩减为Sum(f => f.somenumber)

答案 1 :(得分:3)

MyType type = new MyType {
                Sum =
                 this.ObjectContext.SomeCollection
                 .Where(...)
                 .Select(f => f.somenumber)
                 .Sum() };

甚至

MyType type = new MyType {
                Sum =
                 this.ObjectContext.SomeCollection
                 .Where(...)
                 .Sum(f => f.somenumber) };

应该做的伎俩