【发布时间】:2015-07-31 03:32:34
【问题描述】:
我正在尝试对多个DbContext.Sets 进行左外连接和内连接,但内连接会阻止外连接正常工作。我的桌子:
供应商:
ID, Name
V1, Alan
V2, Brad
V3, Cath
地区:
ID, Name
R1, Ohio
R2, Utah
R3, Iowa
订单:
ID, VendorID, RegionID
O1, V1, R1
O2, V1, R2
O3, V2, R1
O4, V2, R3
O5, V3, R2
O6, V3, R3
我想运行一个查询,返回所有供应商,如果他们有任何显示订单的地区,如果他们没有,则返回空白值。因此,如果我想使用爱荷华州作为区域运行查询,结果将是:
Vendor, OrderID
Alan,
Brad, O4
Cath, O5
在 sql 中,我要么使用where value = 'bar' or value is null 语法,要么使用内连接创建一个临时表,然后外连接临时表和外连接表。我如何在 linq 中执行此操作?我似乎无法使用 '... or is null' 获得语法,并且我无法外连接 Set 和 IQueryable(这是我从查询创建“临时表”时得到的。
这是我目前基于多次谷歌搜索并通过 SO 进行的尝试:
var orders = from o in context.Orders
where o.RegionID == region.ID // region is an object from the EF model 'Region' class
select o;
var vendorOrders = from v in context.Vendors
where vendorNameList.Contains(v.Name) // vendorNameList is a string []
join orders on v equals orders.Vendor into list
from vo in list.DefaultIfEmpty()
select new { Vendor = v, Order = orders == null ? "" : orders.ID };
这不会与“订单是一个变量,但在“将 v 上的订单等于订单。供应商进入列表”行中的类型用作类型。
如何让所有供应商参与我的结果?
【问题讨论】:
-
你能显示你想得到的sql查询吗?
标签: c# linq entity-framework outer-join