2014-10-31 96 views
0

我在我的一個函數中使用了這個邏輯,但它向數據庫執行了3次往返。如何將查詢轉換爲僅對數據庫執行一個查詢?如何過濾簡單的LINQ查詢並在更復雜的LINQ查詢中使用它

var saisonTouristiqueId = 1; 
var currentSaison = this.appContext.SaisonTouristiques.FirstOrDefault(x => x.SaisonTouristiqueId == saisonTouristiqueId); 

var nextSaison = (from saison in this.appContext.SaisonTouristiques 
        where saison.DebutSaison > currentSaison.FinSaison 
        orderby saison.DebutSaison 
        select saison).FirstOrDefault(); 

if (nextSaison != null) 
{ 
    var forfaits = from forfait in this.appContext.Forfaits 
        where forfait.ComposantForfaits.Any(x => x.SaisonTouristiqueId == nextSaison.SaisonTouristiqueId) 
        select forfait; 

    return forfaits.ToList(); 
} 
+0

我認爲你可以使用加入 – 2014-10-31 20:31:52

+0

@COLDTOLD我不明白你是怎麼做的,因爲他在做什麼。 – Servy 2014-10-31 20:39:24

+0

也許交叉連接我沒有意識到他的兩個查詢都在一張桌子上 – 2014-10-31 20:42:51

回答

1

在隨後的查詢時,僅使用FirstOrDefault,讓所有的執行被推遲。

var saisonTouristiqueId = 1; 
var currentSaison = this.appContext.SaisonTouristiques 
    .Where(x => x.SaisonTouristiqueId == saisonTouristiqueId); 

var nextSaison = from saison in this.appContext.SaisonTouristiques 
        where saison.DebutSaison > currentSaison.FirstOrDefault().FinSaison 
        orderby saison.DebutSaison 
        select saison; 

var forfaits = from forfait in this.appContext.Forfaits 
       where forfait.ComposantForfaits.Any(x => x.SaisonTouristiqueId == nextSaison.FirstOrDefault().SaisonTouristiqueId) 
       select forfait; 

return forfaits.ToList(); 
+0

它很棒!謝謝 – 2014-11-03 14:50:41