簡體   English   中英

如何使用LINQ和Entity Framework查詢與“AND”條件的多對多關系

[英]How to query many-to-many relationship with 'AND' condition using LINQ and Entity Framework

我當前的數據庫解決方案包括三個名為EstablishmentFeature表,以及一個名為EstablishmentFeature的多對多表鏈接(因為一個企業可以擁有許多功能,並且一個功能可以存在於多個企業中)。

我需要生成一個返回只滿足某些條件的企業的查詢,即哪些企業具有基於傳入的featureId集合的X特征。企業必須擁有正在搜索的所有功能,即。 AND沒有OR條件。

我得到了SQL以達到理想的結果,但是我想把我的頭發拉出來試圖找出LINQ(lambra)。 T-SQL是:

SELECT e.[EstablishmentId], e.[Name], e.[Description]
FROM Establishment e
INNER JOIN EstablishmentFeature ef
ON e.[EstablishmentId] = ef.[EstablishmentId]
WHERE ef.[FeatureId]  in ('20', '15', '72')
GROUP BY e.[EstablishmentId], e.[Name], e.[Description] 
HAVING COUNT(*) = 3

我嘗試使用Linqer轉換SQL,但Linqer在嘗試轉換時崩潰。 我嘗試重新安裝Linqer,但在嘗試編譯LINQ語法時崩潰沒有失敗。 (雖然更簡單的轉換工作)。 還嘗試使用LinqPad計算出LINQ等價物,但我最后還是追逐了我的尾巴......

這是我必須使用PredicateBuilder嗎? 有點筋疲力盡,如果有一個簡單的解決方案可以逃避我,我不想通過PredicateBuilder學習曲線。

我試試這個(對於所有給定的id,有任何 (=至少一個)具有此給定id的特征):

var establishments = context.Establishments
    .Where(e => featureIds.All(fid => e.Features.Any(f => f.FeatureId == fid)))
    .ToList();

featureIds是一個IEnumerable<int> ,正在搜索ID。)

暫無
暫無

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

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