Pou*_*uya 3 c# linq entity-framework entity-framework-4
我是linq和EF的首发.我有4张桌子
CurrencyUnit
CurrencyUnitID CurrencyName
-------------------------------
1 Dolar
2 Pond
Run Code Online (Sandbox Code Playgroud)
请求
RequestID WayBillNo
--------------------------
1 10000
2 10001
Run Code Online (Sandbox Code Playgroud)
COSTTYPE
CostTypeID CostName
-------------------------------
1 A
2 B
Run Code Online (Sandbox Code Playgroud)
RequestCost
RequestId CostId CurrencyUnitId Amount Remark
-----------------------------------------------------------
1 1 1 200
1 2 1 400
2 2 2 1000
Run Code Online (Sandbox Code Playgroud)
我想加入这4个表并得到这个结果
结果(表)
RequestId WayBillNo CostId CostName CurrencyUnitId CurrencyUnitName Amount Remark
------------------------------------------------------------------------------------------
1 10000 1 A 1 Dollar 200
1 10000 2 B 2 Pond 400
2 10001 1 A 0 0
2 10001 2 B 2 Pond 1000
Run Code Online (Sandbox Code Playgroud)
我写这个查询
var items = (from rc in context.CLEARANCE_COST
join c in context.COST_TYPES on rc.COST_ID equals c.COST_ID
join d in context.CLEARANCE_REQUEST on rc.REQUEST_ID equals d.REQUEST_ID
join f in context.CURRENCY_UNITS on rc.CURRENCY_ID equals f.CURRENCY_ID
select new
{
rc.COST_AMOUNT,
c.COST_ID,
c.COST_NAME,
d.WAYBILL_NO,
f.CURRENCY_NAME
}).ToList();
Run Code Online (Sandbox Code Playgroud)
但得到这个结果(B表)
RequestId WayBillNo CostId CostName CurrencyUnitId CurrencyUnitName Amount Remark
1 10000 1 A 1 Dollar 200
1 10000 2 B 2 Pond 400
2 10001 2 B 2 Pond 1000
Run Code Online (Sandbox Code Playgroud)
即,如果请求没有成本显示此请求的所有成本并设置金额值0,例如A表有4行但是B表在表A中有3行用于请求2成本1设置金额0但在表B中没有设置,我想要的.
编辑
在linq中尝试左外连接,如下所示....
var query=
from rc in RequestCost
join c in CostType on rc.CostId = c.CostTypeID into RCC
from rcc in RCC.DefaultIfEmpty()
join r in Request on rc.RequestID = r.RequestID into RCR
from rcr in RCR.DefaultIfEmpty()
join cu in CurrencyUnit
on rc.CurrencyUnitId = cu.CurrencyUnitID into RCCU
from rccu in RCCU..DefaultIfEmpty()
select new
{
RequestId = rc.RequestId,
WayBillNo = rcr != null ? rcr.WayBillNo : "<No WayBillNo>",
CostId = rc.CostId,
CostName = rcc != null ? rcc.CostName : "<No CostName>",
CurrencyUnitID= rc.CurrencyUnitID,
CurrencyName = rccu != null ? rccu.CurrencyName: "<No CurrencyName>",
Amount = rc.Amount != null ? rc.Amount : 0 ,
Remark = rc.Remark != null ? rc.Remark : "<No Remark>",
}
Run Code Online (Sandbox Code Playgroud)
所以根据你的表格查询你
var query=
from rc in RequestCost
join c in CostType on rc.CostId = c.CostTypeID
join r in Request on rc.RequestID = r.RequestID
join cu in CurrencyUnit on rc.CurrencyUnitId = cu.CurrencyUnitID
select new
{
rc.RequestId,
r.WayBillNo,
rc.CostId,
c.CostName
rc.CurrencyUnitID,
cu.CurrencyName,
rc.Amount,
rc.Remark
}
Run Code Online (Sandbox Code Playgroud)
查看帖子了解更多详细信息:SQL to LINQ(Visual Representation)
该图显示了连接如何在linq中工作

| 归档时间: |
|
| 查看次数: |
5579 次 |
| 最近记录: |