0
LINQ的join ... into
和.DefaultIfEmpty()
如何工作來表示左連接?LINQ的左連接「加入...」和「DefaultIfEmpty()」如何工作?
是否.DefaultIfEmpty()
得到評估一次,或n次?
LINQ的join ... into
和.DefaultIfEmpty()
如何工作來表示左連接?LINQ的左連接「加入...」和「DefaultIfEmpty()」如何工作?
是否.DefaultIfEmpty()
得到評估一次,或n次?
假設我們正在談論LINQ到對象,DefaultIfEmpty
將在結果中的每個元素進行一次評估。它將按照與連接的「左」部分匹配的值組的順序進行評估。因此,如果我們有:
from x in foo
join y in bar into z
let g = z.DefaultIfEmpty()
select new { x, g.Count() }
然後爲每個x
值,會有DefaultIfEmpty
調用。對於非空序列,這隻會傳遞值。對於空序列,返回(一次)默認值。
查看my Edulinq blog post on it瞭解更多信息。
'DefaultIfEmpty'如何不直觀?如果集合爲空,它將返回默認值,如果不是,則返回原始集合。這是確保結果序列不爲空的一種方法。它在連接操作中的每一個序列都被調用,只要輸入序列至少有一個值,它就不會執行任何操作。也許你應該用方法語法而不是查詢語法寫出來;有時候人們更容易理解。 – Servy 2013-05-09 19:44:43
你問在LINQ-to-objects中組加入的實現是什麼?或者如何將組加入轉換爲方法調用?或者是什麼?我在理解這裏的問題真的有些困難。 – 2013-05-09 19:47:04
@EricLippert - 我首先想到的是Linq對象。但是現在你問,我有興趣知道linq IQueryProviders的答案如何變化。 – 2013-05-09 19:50:22