2017-07-25 58 views
0

reportMessages從報告中收到 cleandirs是從存儲中讀取的。 我試圖驗證此報告 的內容我在做一個outter加入對reportmessages和存儲數據Linq外左加入我做錯了什麼?

我限制名單100,仍然m.count = 213

我在做什麼錯?

var q = from r in reportMessages.Take(100) 
     join pp in cleanNoDirs.Take(100) 
     on r.FileName equals ("{:D2}{:D2}-{}.ps".format(pp.NameMin, pp.NameSec, pp.CameraMAC)) 
     into ps 
     from p in ps.DefaultIfEmpty() 
     select new { 
      Uploaded = p, 
      Orig = r 
     }; 
var m = q.ToList(); 

回答

0

您限制從每個表中檢索到100條記錄,但如果你有一個一對多或多對多的關係,則join的結果將是更多的100條記錄。在最糟糕的情況下,如果第一個集合中的每個記錄都與第二個集合中的所有記錄匹配,則結果中將獲得100 * 100個記錄。

相反,與ToList限制100物化結果之前:

var result = (from r in reportMessages 
       join pp in cleanNoDirs 
       on r.FileName equals ("{:D2}{:D2}-{}.ps".format(pp.NameMin, pp.NameSec, pp.CameraMAC)) into ps 
       from p in ps.DefaultIfEmpty() 
       select new { 
        Uploaded = p, 
        Orig = r 
       }).Take(100).ToList(); 
+0

我想我混了左與外連接加入 –

+0

@MickeyPerlstein - 歡迎您:)檢查添加鏈接到我的答案關於不同連接的更多示例/解釋。 –