左外连接 ObjectSet<T> 到 IQueryable
Left Outer Join ObjectSet<T> to IQueryable
我正在尝试对多个 DbContext.Set
执行左外连接和内连接,但内连接会阻止外连接正常工作。我的 tables:
供应商:
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
我想 运行 查询 returns 所有供应商按区域显示订单(如果有)和空白值(如果有 none)。因此,如果我想 运行 使用爱荷华州作为区域的查询,结果将是:
Vendor, OrderID
Alan,
Brad, O4
Cath, O5
在 sql 中,我要么使用 where value = 'bar' or value is null
语法,要么使用内部联接创建临时 table,然后外部联接临时 table 和外部加入 table。我如何在 linq 中执行此操作?我似乎无法使用 '... or is null' 获取语法,而且我无法外部连接 Set 和 IQueryable (这是我从查询创建 'temp table' 时得到的结果。
这是我目前基于多次谷歌搜索并通过 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 };
这不会在 "join orders on v equals orders.Vendor into list" 行上使用 'orders is a variable, but is used like a type' 进行编译。
如何让所有供应商都参与到我的结果中?
试试这个代码,先生
var vendorOrders = from v in context.Vendors
where vendorNameList.Contains(v.Name) // vendorNameList is a string []
join v1 in orders.toList() on v equals v1.Vendor into list
from vo in list.DefaultIfEmpty()
select new { Vendor = v, Order = orders == null ? "" : orders.ID };
试试这个查询
var vendorOrders = from v in context.Vendors.where(x=>vendorNameList.Contains(x.Name)) // vendorNameList is a string []
from o in context.Orders.where(x=>x.RegionID == region.ID && x. VendorID==v. ID).DefaultIfEmpty()
select new { Vendor = v, Order = orders == null ? "" : orders.ID };
我正在尝试对多个 DbContext.Set
执行左外连接和内连接,但内连接会阻止外连接正常工作。我的 tables:
供应商:
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
我想 运行 查询 returns 所有供应商按区域显示订单(如果有)和空白值(如果有 none)。因此,如果我想 运行 使用爱荷华州作为区域的查询,结果将是:
Vendor, OrderID
Alan,
Brad, O4
Cath, O5
在 sql 中,我要么使用 where value = 'bar' or value is null
语法,要么使用内部联接创建临时 table,然后外部联接临时 table 和外部加入 table。我如何在 linq 中执行此操作?我似乎无法使用 '... or is null' 获取语法,而且我无法外部连接 Set 和 IQueryable (这是我从查询创建 'temp table' 时得到的结果。
这是我目前基于多次谷歌搜索并通过 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 };
这不会在 "join orders on v equals orders.Vendor into list" 行上使用 'orders is a variable, but is used like a type' 进行编译。
如何让所有供应商都参与到我的结果中?
试试这个代码,先生
var vendorOrders = from v in context.Vendors
where vendorNameList.Contains(v.Name) // vendorNameList is a string []
join v1 in orders.toList() on v equals v1.Vendor into list
from vo in list.DefaultIfEmpty()
select new { Vendor = v, Order = orders == null ? "" : orders.ID };
试试这个查询
var vendorOrders = from v in context.Vendors.where(x=>vendorNameList.Contains(x.Name)) // vendorNameList is a string []
from o in context.Orders.where(x=>x.RegionID == region.ID && x. VendorID==v. ID).DefaultIfEmpty()
select new { Vendor = v, Order = orders == null ? "" : orders.ID };