繁体   English   中英

LINQ-to-SQL-分组依据

[英]LINQ-to-SQL - Group By

我有以下LINQ-to-SQL代码

var customerList = from cm in dc.ConsignmentMarginBreakdowns
                   join tm in dc.ConsignmentTripBreakdowns on new { Depot = cm.Depot, TripNumber = cm.TripNumber, TripDate = cm.TripDate } equals new { Depot = tm.Depot, TripNumber = tm.TripNumber, TripDate = tm.TripDate }
                   join sl in dc.SageAccounts on new { LegacyID = cm.Customer, Customer = true } equals new { LegacyID = sl.LegacyID, Customer = sl.Customer }
                   join ss in dc.SageAccounts on sl.ParentAccount equals ss.ID
                   where (tm.DeliveryDate >= dateRange1.FromDate && tm.DeliveryDate <= dateRange1.ToDate) || (dateRange2.FromDate != null && (tm.DeliveryDate >= dateRange2.FromDate && tm.DeliveryDate <= dateRange2.ToDate))
                   where tm.Depot == depotLetter
                   group cm by new { ss.Name, ss.ID } into cmg
                   select new
                   {
                       CustomerID = cmg.Key.ID,
                       CustomerName = cmg.Key.Name,
                       Sales1 = cmg.Where(a => a.DeliveryDate >= dateRange1.FromDate && a.DeliveryDate <= dateRange1.ToDate).Sum(a => a.TripSalesTotal),
                       Sales2 = dateRange2.FromDate != null ? tmg.Where(a => a.DeliveryDate >= dateRange2.FromDate && a.DeliveryDate <= dateRange2.ToDate).Sum(a => a.TripSalesTotal) : 0.00m
                   };

我遇到的问题是,当我选择“ tm”中的“ DeliveryDate”时,它不在查询范围内。 有什么想法可以在查询中获得此值吗?

谢谢

只需创建另一个匿名类型

 group new { cm, tm } by new { ss.Name, ss.ID } into cmg

因此您的查询将如下所示:

var customerList = from cm in dc.ConsignmentMarginBreakdowns
                   join tm in dc.ConsignmentTripBreakdowns on new { Depot = cm.Depot, TripNumber = cm.TripNumber, TripDate = cm.TripDate } equals new { Depot = tm.Depot, TripNumber = tm.TripNumber, TripDate = tm.TripDate }
                   join sl in dc.SageAccounts on new { LegacyID = cm.Customer, Customer = true } equals new { LegacyID = sl.LegacyID, Customer = sl.Customer }
                   join ss in dc.SageAccounts on sl.ParentAccount equals ss.ID
                   where (tm.DeliveryDate >= dateRange1.FromDate && tm.DeliveryDate <= dateRange1.ToDate) || (dateRange2.FromDate != null && (tm.DeliveryDate >= dateRange2.FromDate && tm.DeliveryDate <= dateRange2.ToDate))
                   where tm.Depot == depotLetter
                   group new { cm, tm } by new { ss.Name, ss.ID } into cmg
                   select new
                   {
                       CustomerID = cmg.Key.ID,
                       CustomerName = cmg.Key.Name,
                       Sales1 = cmg.Where(a => a.tm.DeliveryDate >= dateRange1.FromDate && a.tm.DeliveryDate <= dateRange1.ToDate).Sum(a => a.cm.TripSalesTotal),
                       Sales2 = dateRange2.FromDate != null ? tmg.Where(a => a.tm.DeliveryDate >= dateRange2.FromDate && a.tm.DeliveryDate <= dateRange2.ToDate).Sum(a => a.cm.TripSalesTotal) : 0.00m
                   };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM