方法结果在groupby中

时间:2018-02-21 13:29:49

标签: c# linq

如何按方法分组?

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),作为分组参数。 我该如何解决这个问题?

1 个答案:

答案 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();