[英]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.