[英]Entity Framework Linq Query to return list of IDs
我如何獲得在 linq 中運送所有訂單的公司 ID 列表? 場景:每家公司都有一堆客戶和客戶的訂單。 從下表中,CompanyB 和 CompanyC 已將所有訂單發送給客戶,我想從 linq 查詢中獲取這些 ID。
3個表涉及公司、客戶和訂單
Company
CompanyID CompanyName
1 CompanyA
2 CompnayB
3 CompnayC
Customers
CustomerID CustomerName CompanyID
1 CustomerA 1
2 CustomerB 2
3 CustomerC 2
4 CustomerD 2
5 CustomerE 1
6 CustomerF 2
7 CustomerG 3
Orders
OrderID CustomerID Shipped
1 2 1
2 3 1
3 4 1
4 6 1
5 1 0
6 7 1
這是我嘗試過的,但我沒有得到正確的 output
var IDs = Company.Where(co => co.Customers.Any(cu => cu.Orders.Any(o => o.shipped))).ToList();
任何幫助深表感謝..
嘗試這個:
var IDs = (from co in Company
join cu in Customers on co.CompanyID equals cu.CompanyID
join o in Orders on cu.CustomerID equals o.CustomerID
where o.Shipped
select new { co.CompanyID }).ToList();
我沒有嘗試運行它,但是如果我嘗試All
而不是Any
會怎樣? 也許,如果您在 EF 上使用數據庫而不僅僅是一個集合,您應該啟用延遲加載。 而且,由於您只需要ID
,我添加了Select
var IDs = Company
.Where(co => co.Customers.All(cu => cu.Orders.All(o => o.Shipped)))
.Select(co => co.CompanyID)
.ToList();
您可以使用 linq 連接兩個表,如下所示:
var Ids = (from cu in Customers
join o in Orders on cu.CustomerId equals o.CustomerId
where o.Shipped
select cu.CompanyId).Distinct().ToList();
你可以使用 fluentApi:
var ids = Orders.Where(o => o.Shipped).Join(Customers, o => o.CustomerId, c => c.CustomerId, (o, c) => new
{
c.CompanyId
}).Distinct().ToList();
您可以依靠SelectMany
作為雙重All
調用的替代方法:
var companyIds = Companies
.Where(co => co.Customers.SelectMany(c => c.Orders).All(o => o.shipped))
.Select(co => co.CompanyId)
.ToList();
對於您的要求,恕我直言,這感覺更加語義化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.