簡體   English   中英

動態linq group by子句

[英]dynamic linq group by clause

我有多個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,但這是靜態的)。

感謝您的任何見解......

如果有人好奇,我通過使用條件語句讓它工作......因為按空分組會使它崩潰。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM