如何按方法分组?
var group = invoices.GroupBy(x => new {
x.User.IdUser,
x.PriceCatId,
x.Destination,
OrderHelper.ViewCyclesNames(x.Order.History.catId),
x.Cate
}).ToList();
编译器不接受OrderHelper.ViewCyclesNames(x.Order.History.catId),
作为分组参数。
我该如何解决这个问题?
答案 0 :(得分:0)
您的分组表达式创建了一个匿名类的对象:
new {
x.User.IdUser,
x.PriceCatId,
...
}
C#编译器生成一个类,其属性对应于花括号内的每个表达式。为了做到这一点,编译器必须知道每个对象的类型,以及它应该给相应字段的名称。因此,匿名类的属性的一般语法如下:
new {
PropertyName = SomeExpression
...
}
请注意,通常需要一个名称后跟=
来命名匿名类的属性。 C#从此规则中产生一个例外:如果SomeExpression
是属性表达式或变量表达式,则表达式中的属性或变量的名称用于命名匿名类型的相应属性。
这就是为什么group-by表达式中的五个属性中的四个不会造成任何麻烦。给你带来麻烦的属性是唯一一个不属性表达式的属性;因此,它需要一个明确的名称:
var group = invoices.GroupBy(x => new {
x.User.IdUser,
x.PriceCatId,
x.Destination,
ViewCyclesNames = OrderHelper.ViewCyclesNames(x.Order.History.catId),
x.Cate
}).ToList();