2017-04-25 59 views
0

我有這個疑問:LINQ雙加入時間過長執行

var ftr_dist = db.DIST_VIEW.Where(x => x.CITY == "Los Angeles"); 
    var mst2 = db.TB_SERVICE.Where(x => x.ID == x.ID); 
    var trf2 = db.TYPE.Where(x => x.ID == x.ID); 

    var Data = (from ftr in ftr_dist 
         join mst in mst2 on ftr.CUSTOMER_ID equals mst.CUSTOMER_ID 
         join trf in trf2 on mst.TYPE_ID equals trf.ID 
         select new TypeObj { City = ftr.CITY, County = ftr.COUNTY, Type = trf.Type } 
        ).OrderBy(i => i.City).ThenBy(i => i.County).ToList(); 

ftr_dist大約有72000行。 mst2有1100000行,trf2有340行。但獲取Data需要很長時間。我怎樣才能使這個查詢更快?謝謝。

+0

是否需要大大縮短才能得到相同的結果由原始的SQL? –

+0

連接分析器並查看它正在執行的查詢。 – Nicholas

+0

你在這些表中有沒有索引? – TriV

回答

0

你基本上執行4個不同的查詢。 Linq確實需要更長的時間才能查詢,而不是使用Linq。將所有查詢合併成一個。

我在你的lambda查詢中有點困惑(x => x.ID == x.ID)。您可能需要將其添加到下面

var data = from ftr in db.DIST_VIEW 
      join mst in db.TB_SERVICE on ftr.CUSTOMER_ID equals 
      mst.CUSTOMER_ID 
      join trf in db.TYPE on trf.TYPE_ID equals ftr.ID 
      where ftr.CITY == "Los Angeles" 
      select new TypeObj 
      { 
      City = ftr.City, 
      Country = ftr.County, 
      Type - trf.Type 
      }.OrderBy(i => i.City).ThenBy(i => i.County).ToList(); 
+0

我做了你所說的,但它仍然需要很長時間。 – jason

+0

探查器執行多少時間? –

+0

我一直在等待5分鐘,它仍然在工作。 – jason