![](/img/trans.png)
[英]Query a many-to-many relationship with linq/Entity Framework. CodeFirst
[英]How to query many-to-many relationship with 'AND' condition using LINQ and Entity Framework
我當前的數據庫解決方案包括三個名為Establishment
, Feature
表,以及一個名為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.