Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.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# 连接4个表的Linq查询_C#_Asp.net_Linq_Join - Fatal编程技术网

C# 连接4个表的Linq查询

C# 连接4个表的Linq查询,c#,asp.net,linq,join,C#,Asp.net,Linq,Join,我有一个名为deliveries的表,其中包含id、shiftid、occurrence、delfee)列。我还有另外三张桌子,delcash,delcc,delsplit。Del cash有列(id,cost,paid),delcc有列(id,cccost,ccpaid,cashtip),delsplit有列(id,cashcost,cashpayed,cccost,ccpaid)。id根据付款类型将交付条目链接到其他三个表之一。我试图得到一个列表,其中的表以某种方式连接在一起,这样我就可以遍

我有一个名为deliveries的表,其中包含id、shiftid、occurrence、delfee)列。我还有另外三张桌子,delcash,delcc,delsplit。Del cash有列(id,cost,paid),delcc有列(id,cccost,ccpaid,cashtip),delsplit有列(id,cashcost,cashpayed,cccost,ccpaid)。id根据付款类型将交付条目链接到其他三个表之一。我试图得到一个列表,其中的表以某种方式连接在一起,这样我就可以遍历一个列表,并在视图中得到一个表,该表按照发生顺序显示每次交付,以及每次交付的提示和交付费用。有没有可能做到这一点?还是应该只使用SQL

SELECT deliveries.occurrence, deliveries.delfee,delcash.cost,delcash.paid,delcc.cost,delcc.paid,delcc.cashtip,
delsplit.cashcost,delsplit.cashpaid,delsplit.cccost,delsplit.ccpaid
FROM deliveries
LEFT JOIN delcash
ON deliveries.id = delcash.id
LEFT JOIN delcc
ON deliveries.id = delcc.id
LEFT JOIN delsplit
ON deliveries.id = delsplit.id

您可以创建一个新类,并让三个成本表继承自该类,然后您可以应用表每具体类型策略来映射表

见:


或者重新设计数据库并按类型应用表策略。

尝试以下方法:

var joinedDel = from delivery in tblDeliveries
                join delC in tblDelCash on delivery.id equals delC.id
                join delCC in tblDelCreditCard on delivery.id equals delCC.id
                join delSplit in tblDelSplit on delivery.id equals delSplit.id
                select new {
                      //Then create a new instance of Anonymous object where you will set all values of its properties
                      //For example, you can set ShiftID = delivery.ShiftID
                };

我还建议首先规范化您的表(请参阅本文以供参考)。这将使您更加了解如何正确地连接这些表。

您是否使用实体框架?是的,我使用的是实体可以说明或给出每个表的外键。交付有三种可能的支付方式之一,现金、信用或拆分。因此,将传递表中的id转换为其他三个表(delcash、delcc、delsplit)之一的外键(id)
delcash.cost、delcash.paid、delcc.cost、delcc.paid、delcc.cashtip、delsplit.cashcost、delsplit.cashpay、delsplit.cccost、delsplit.ccpaid
如果选择这些项,这有时会为其他字段提供空值。我认为设置这些表的方式是规范化的?如果没有,你能给出一个具体的例子来说明如何正确地规范它们吗?我有一些东西与你在这里列出的非常相似,只是看起来像这样:从db.deliveries在db.delcashes中加入delcashes在deliveries.id等于delcashes.id在db.delccs中加入delccs在delccs.id等于delccs.id加入delsplits在db.delsplits on deliveries.id等于delsplits.id选择new deliverylistitem(),名称中的差异来自于visual studio在创建模型时生成的名称。您能给出连接表所需的属性吗??与SQL一样,您需要选择需要包含哪些字段。例如,您需要
id
ShiftId
occurrence
Delete
详细信息。是的,您可以创建
DeliveryListItem
对象的新实例,并只设置其属性。使用匿名对象只会使您的代码能够灵活地设置在已定义对象上找不到的不同属性。我已将SQL中需要的查询添加到我的原始帖子中。