簡體   English   中英

列表中的 Linq select 具有 2 個多對多關系

[英]Linq select in list with 2 many-to-many relationships

我有以下數據庫結構:

用戶<--> [user_client] <-->客戶端<--> [client_application] <-->應用程序

USER、CLIENT 和 APPLICATION 表包含唯一鍵。 user_client 和 client_application 是 map 用戶到 CLIENT 和 CLIENT 到 APP 的多對多表。

我正在使用 MVC5 / C#。 實體框架將多對多表隱藏在我的 Model 中。

我想要實現的是:對於具有客戶列表的給定用戶,獲取他所有客戶擁有的不同應用程序的組合列表。

您能否幫忙解決邏輯和 Linq 查詢(如果可能的話,最好使用流利的語法)? 是否可以在不遍歷客戶端列表的情況下在單個查詢中執行此操作?

先感謝您。

雷達

不確定它是否與您的架構匹配,但是

user.clients.SelectMany(c => c.applications).Distinct()

關鍵是使用SelectMany而不是Select,它將為您提供IEnuerable<Application>而不是IEnumerable<IEnumerable<Application>>

var user = context.Users.Where(u => u.Id == 1).Single();
var applications = user.Clients
    .SelectMany(c => c.Application)
    .GroupBy(a = a.Id)
    .Select(a => a.First());

我想合作解決這個問題,而不是提供確切的解決方案,而是提供更多信息。

我對自己的問題應用了@tafia答案,但對SelectMany方法進行了輕微修改。 我只用Select替換了它。

File selectedFile = _unitOfWork.FileRepository.GetById(idFile)
selectedFile.FilePaper.Select(c => c.Paper).Distinct().ToList()

您可以在此處閱讀SelectSelectMany之間的區別。

我將修改后的解決方案應用於以下一組表:

在此處輸入圖像描述

盡管您的桌子似乎有所不同:

在此處輸入圖像描述

我不確定@tafia 提出的解決方案是否在那里有效。

PS。 如果你想讓中間表出現在 EF 中,一個可能的“修復”是向它們添加一個主鍵( id )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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