C# 实体框架-按条件将列添加到分组中

C# 实体框架-按条件将列添加到分组中,c#,entity-framework,linq,C#,Entity Framework,Linq,我想有条件地将列添加到GroupBy子句中,但我不确定如何实现 根据用户的输入,我有5列要添加到GROUPBY语句中。为此,我有以下属性: ProductId ColorId PieceId SizeId WeightId 如果任何属性的值大于0,则需要在GROUPBY子句中使用此列 所以,如果ProductId、ColorId和PieceId的值大于0,则group by中应存在以下值: list.GroupBy(p => new { p.Product.Id, p.ColorId,

我想有条件地将列添加到GroupBy子句中,但我不确定如何实现

根据用户的输入,我有5列要添加到GROUPBY语句中。为此,我有以下属性:

ProductId
ColorId
PieceId
SizeId
WeightId
如果任何属性的值大于0,则需要在GROUPBY子句中使用此列

所以,如果ProductId、ColorId和PieceId的值大于0,则group by中应存在以下值:

list.GroupBy(p => new { p.Product.Id, p.ColorId, p.PieceId });

试试这样的东西

var groupedList = list.GroupBy(p => new
{
    ProductId = p.Product.Id > 5 ? p.Product.Id : (int?)null,
    ColorId = p.ColorId > 5 ? p.ColorId : (int?)null,
    PieceId = p.PieceId > 5 ? p.PieceId : (int?)null
})
.Select(x =>
new
{
    x.Key.ProductId,
    x.Key.ColorId,
    x.Key.PieceId
}).ToList();

也许,使用
动态
.GroupBy(p=>{dynamic exp=new ExpandoObject();if(p.Product.Id>0)exp.ProductId=p.Product.Id;/*其他字段*/return exp;})假设我有布尔变量而不是整数变量,那么我需要在GROUPBY中放置哪些条件?您可以执行相同的逻辑。诸如此类的事情;新的{Bool1=p.Bool1==true?p.Bool1:(bool?)null,Bool2=p.Bool2==true?p.Bool2:(bool?)null,Bool3=p.Bool3==true?p.Bool3:(bool?)null,}