簡體   English   中英

實體框架 Linq 查詢返回 ID 列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM