C# 动态linq group by子句

C# 动态linq group by子句,c#,linq,C#,Linq,我有多个linq查询,它们只在不同的分组级别检索相同的数据。(可能有3个不同的级别)。linq查询当前生成自定义对象的可枚举列表。我不理解或怀疑是否可能的项目(以减少冗余代码): 我可以使下面的GROUPBY子句成为动态的吗? 如果是这样的话,当在该级别对自定义对象组数据进行分组时,它是否可以动态填充自定义对象组数据 例如: var myReport_GroupProductLevel = from r in mySum_GroupProductLevel

我有多个linq查询,它们只在不同的分组级别检索相同的数据。(可能有3个不同的级别)。linq查询当前生成自定义对象的可枚举列表。我不理解或怀疑是否可能的项目(以减少冗余代码):

我可以使下面的GROUPBY子句成为动态的吗? 如果是这样的话,当在该级别对自定义对象组数据进行分组时,它是否可以动态填充自定义对象组数据

例如:

 var myReport_GroupProductLevel =
                from r in mySum_GroupProductLevel
                join pc in _myPlotCount on r.Strata equals pc.Strata
                join acr in _myStrataAcres on pc.Strata equals acr.Strata
                group new { r, pc, acr } by new { r.Strata, pc.Count, acr.Acres, r.GroupName, r.ProductName } into g
                select new DataSummary
                {
                    Strata = g.Key.Strata,
                    PlotCount = g.Key.Count,
                    Acres = g.Key.Acres,
                    ClassName = string.Empty,
                    GroupName = g.Key.GroupName,
                    ProductName = g.Key.ProductName,
                    TPAMEAN = g.Sum(x => x.r.TPA / x.pc.Count),
                    TPADEV = g.Select(x => x.r.TPA).StdDev(g.Key.Count)
                };
如果我只想用“GroupName”来分组。。。我会重写这个查询。我看到的问题是,如果我按一个值分组,那么我需要在查询中使用该值(g.Key.GroupName);但由于我正在创建一个新的自定义对象,其他非分组值(如“ClassName”)需要一个值(我在上面使用了string.Empty,但这是静态的)


感谢您的任何见解…

如果有人好奇,我通过使用条件语句来实现它。。。因为按空分组将使其崩溃

var mySum_ClassGroupProductLevel =
                from s in ReportData.myStands
                join p in ReportData.myPlots on s.ID equals p.StandID
                join t in ReportData.myTrees on p.ID equals t.PlotID
                group t by new { s.Strata, p.ID, 
                    ClassName = useClassName ? t.ClassName : string.Empty, 
                    GroupName = useGroupName ? t.GroupName : string.Empty, 
                    ProductName = useProductName ? t.ProductName : string.Empty }
                    into g
                select new
                {}