左外连接ObjectSet<这个IQueryable
本文关键字:这个 IQueryable ObjectSet 连接 | 更新日期: 2023-09-27 18:05:44
我试图在多个DbContext.Set
s上进行左外连接和内连接,但内连接阻止外连接正常工作。我的表:
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中怎么做呢?我似乎无法理解使用'…或者是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 };
这不会编译成'orders是一个变量',而是像' type'一样用于' join orders on v = orders '。
我如何让所有供应商在我的结果?
试一下这个代码,先生
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 };