【问题标题】:dynamic linq group by clause动态 linq group by 子句
【发布时间】:2011-04-13 20:04:58
【问题描述】:

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

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

例如:

 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,但这是静态的)。

感谢您的任何见解...

【问题讨论】:

    标签: c# linq


    【解决方案1】:

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

    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
                    {}
    

    【讨论】:

      猜你喜欢
      • 2014-12-26
      • 1970-01-01
      • 2011-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-06
      • 1970-01-01
      相关资源
      最近更新 更多