2012-06-21 35 views
0

我已經想出了以下的LINQ,但我不禁想到我應該能夠在一個查詢中做到這一點,而不是兩個。誰能幫忙?Linq和三個表的分組

這個想法是內連接三個表並且一個一個地組合。

var q1 = from er in ExportRules 
    join per in PlaceExportRules on er.ExportRulesID equals per.ExportRulesID 
    select new 
    { 
     PlaceID = per.PlaceID, 
     Description = er.Description, 
     Tag = er.TagName, 
     ExportName = per.ExportName, 
     ExportAddress = per.ExportAddress 
    }; 

var q2 = from p in Places 
    join rules in q1 on p.PlaceID equals rules.PlaceID into joined2 
    where joined2.Any() 
    orderby p.PlaceName 
    select new {Place = new {p.PlaceID, p.PlaceName}, joined2}; 
+0

你不需要在一個查詢中完成它們,它們將只執行一次(隱式地,當你試圖通過ToList獲取數據時,它將被轉換爲一個查詢,...)。 –

回答

2

好吧,你可以事物支架:

var query = from p in Places 
      join rules from 
       (from er in ExportRules 
        join per in PlaceExportRules 
        on er.ExportRulesID equals per.ExportRulesID 
        ...) 
       on p.PlaceId equals rules.PlaceId into joined2 
      where joined2.Any() 
      orderby p.PlaceName 
      select new {Place = new {p.PlaceID, p.PlaceName}, joined2}; 

不過,我個人很可能把它作爲兩個查詢。它更清晰,不會影響性能 - 它不像你的代碼中的第一條語句實際上是執行查詢。

+0

謝謝@jonskeet,那會爲我做。 –