簡體   English   中英

加入多對多表

[英]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();

http://learnentityframework.com/LearnEntityFramework/tutorials/many-to-many-relationships-in-the-entity-data-model/

這可能對你有幫助。 EF可以從設計器生成與導航屬性的關系,因此您不必使用連接。

暫無
暫無

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

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