LINQ 的Join() 方法其效果等同於 SQL 的 INNER JOIN ,若有類似 Left Join 或Right Join 的效果話,
那使用 GroupJoin 會是一個解法,
測試要將兩個集合 deps、emps,整理成以下的結果
依上面結果,可以看出是以 emps 集合為主,列出每項對應的 department ,可使用 GroupJoin() 來達到效果
其中,GroupJoin() 方法中,第一個參數為欲比對的集合,第二個參數為來源集合的 delegate,第三個參數為
欲比對集合的 delegate ,需要注意,第二與第三個參數需要填入兩個集合,可以用來 join 來屬性值,
如 emps 依據 Department_ID,deps 依據 ID ;
最後一個參數就是 callback delegate ,callback 中夾帶兩個引數,em 代表 emps 的每個元素,
depsCollection 代表符合該em Department_ID 的值所有項目,故左邊帶入右邊,使用匿名物件回傳
em.ID、em.Name、depsCollection
最後的最後,使用 SelectMany() 方法來拉平depsCollection,值得注意的是,在第一個參數中,當
遇到元素的屬性 depsCollection 若為null 的時候,new 一個Department 給它,此時的Name 會是 “none”;
而第三個參數,就是回傳匿名類別並對應相關屬性
若是使用 Linq 的查詢語法可以怎麼寫呢?如下所示,
其中也是很直覺,關鍵應該是 「into」,而且語法上閱讀起來負擔似乎輕
最後,若要做到 Right Join 效果的話,其實就是將主要集合跟欲比對集合交換,後續再將要列出的資訊微調即可
沒有留言:
張貼留言