[英]Joining a Many to Many table
我有一種情況,我提供了一種方法來以各種方式查詢數據。 我們為用戶提供4種不同的fitler標准,他們可以根據需要混合搭配。
例如:
public Fruit GetFruit(Boolean isLocal, string storeName, string classificationType, string state);
當所有屬性都在桌面上時,這很簡單,但我的問題是由於數據模型的復雜性而產生的。 我的三個屬性很簡單,它們只是連接,但我有一個表位於一對多的關系后面。 所以為了查詢它,我必須做多對多的加入。
所以,我想說我正在嘗試確定商店提供的所有水果。 商店有一個水果列表,我們的classificationType位於許多關系后面(FruitClassification)
替代文字http://tinyurl.com/39q6ruj
我能夠在EF中查詢此問題的唯一成功方法是選擇所有水果(按分類),然后選擇符合過濾條件的所有商店,然后加入它們。
你會認為ef中的這個查詢是有用的:
var final = (
from s in Stores
join fc in FruitClassifications.Where(z=>z.Classifications.Code == classificationType && z.Classifications.Type.Code =="FRT").Select(x=>x.Fruit).Distinct()
on s.Fruits.Id equals f.Id
where s.Name=name && s.isLocal && s.State==state
select s
).ToList();
但它運行起來很糟糕(當我對它進行分析時看起來一樣),有什么方法可以將這個查詢推送到數據庫嗎? 一種更好的查詢方式?
我想這就是你想要的:
var final = (from s in Stores
where s.Name=name && s.isLocal && s.State==state
&& s.Fruits.Any(f =>
f.FruitClassifications.Any(fc => fc.Code == classificationType
&& fc.Type.Code == "FRT"))
select s).ToList();
這可能對你有幫助。 EF可以從設計器生成與導航屬性的關系,因此您不必使用連接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.