Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 这种表结构的LINQ查询思想_C#_Linq_Linq To Sql - Fatal编程技术网

C# 这种表结构的LINQ查询思想

C# 这种表结构的LINQ查询思想,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,我知道这是一个相当不寻常的问题,但我一直在花一些时间试图找出从异常结构化的数据库中检索数据的最快方法。基本上,数据库如下所示: “Trip”-结构简单的表,这里没有问题 “托运”-每个托运链接到上述行程。这里有趣且恼人的是,每批货物在表中有两条记录,一条记录“销售”值,另一条记录“成本”值——这些记录由字符字段('S'或'C')区分 我的查询基本上需要选择一个日期范围(日期存储在行程表中)之间的所有托运,销售和成本值在行中。下面是我现在的LINQ查询: var cons = from cS in

我知道这是一个相当不寻常的问题,但我一直在花一些时间试图找出从异常结构化的数据库中检索数据的最快方法。基本上,数据库如下所示:

“Trip”-结构简单的表,这里没有问题

“托运”-每个托运链接到上述行程。这里有趣且恼人的是,每批货物在表中有两条记录,一条记录“销售”值,另一条记录“成本”值——这些记录由字符字段('S'或'C')区分

我的查询基本上需要选择一个日期范围(日期存储在行程表中)之间的所有托运,销售和成本值在行中。下面是我现在的LINQ查询:

var cons = from cS in dc.Consignments.Where(a => a.BreakdownType == 'S')
           join cC in dc.Consignments on new { NTConsignment = cS.NTConsignment, LegacyID = cS.LegacyID, TripDate = cS.TripDate, Depot = cS.Depot, TripNumber = cS.TripNumber, BreakdownType = 'C' } equals new { NTConsingment = cC.NTConsignment, LegacyID = cC.LegacyID, TripDate = cC.TripDate, Depot = cC.Depot, TripNumber = cC.TripNumber, BreakdownType = cC.BreakdownType }
           join sl in dc.SageAccounts on new { LegacyID = cS.Customer, Customer = true } equals new { LegacyID = sl.LegacyID, Customer = sl.Customer }
           join ss in dc.SageAccounts on sl.ParentAccount equals ss.ID
           join vt in dc.VehicleTypes on cS.Trip.VehicleType.Trim() equals vt.ID.ToString() into vtg
           where cS.Trip.DeliveryDate >= dates.FromDate && cS.DeliveryDate <= dates.ToDate
           orderby cS.Depot, cS.TripNumber
           select new GMConsignment
           {
                 NTConsignment = cS.NTConsignment,
                 Trip = cS.Trip,
                 LegacyID = cS.LegacyID,
                 Costs = cC.Value ?? 0.00m,
                 Sales = cS.Value ?? 0.00m,
                 Margin = (cS.Value ?? 0.00m) - (cC.Value ?? 0.00m),
                 Customer = cmS.Customer,
                 SageID = ss.SageID,
                 CustomerName = ss.ShortName,
                 FullCustomerName = ss.Name,
                 Vehicle = cS.Trip.Vehicle ?? "None",
                 VehicleType = vtg.SingleOrDefault().VehicleTypeDescription ?? "Subcontractor",
                 VehicleGroup = vtg.FirstOrDefault().VehicleGroup1
           };
var cons=来自dc.commitments.Where中的cS(a=>a.BreakdownType=='S')
在新的{nt寄售=cS.nt寄售,LegacyID=cS.LegacyID,TripDate=cS.TripDate,Depot=cS.Depot,TripNumber=cS.TripNumber,细分类型='C'}上加入cC。寄售{NTConsignment=cC.ntAudition,LegacyID=cC.LegacyID,TripDate=cC.TripDate,Depot=cC.Depot,TripNumber=cC.TripNumber,BreakdownType=cC.BreakdownType}
在新{LegacyID=cS.Customer,Customer=true}等于新{LegacyID=sl.LegacyID,Customer=sl.Customer}的dc.SageAccounts中加入sl
将ss加入sl.ParentAccount上的dc.SageAccounts等于ss.ID
将vt连接到cS.Trip.VehicleType.Trim()上的dc.VehicleTypes中等于vt.ID.ToString()到vtg中

其中cS.Trip.DeliveryDate>=dates.FromDate&&cS.DeliveryDate我的第一个想法是尽可能多地使用与成本或销售值相关的计算列/视图,因此linq查询只需查看相关列/视图即可获得信息。我可以看一下您的行程和考虑表的图表吗?有没有转换
加入vt的方法在cS.Trip.VehicleType.Trim()上的dc.VehicleTypes中等于vt.ID.ToString()
到表达式中?