Linq查询加入4个表

时间:2013-04-17 00:45:55

标签: 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,cashpaid,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

2 个答案:

答案 0 :(得分:0)

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

请参阅: http://weblogs.asp.net/manavi/archive/2010/12/24/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-1-table-per-hierarchy-tph.aspx

或重新设计您的数据库并应用每种类型的策略。

答案 1 :(得分:0)

尝试这样的事情:

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

我还建议您先将表格标准化(请参阅此link以供参考)。这将使您更好地了解如何正确地加入这些表格。