在LINQ中,可以連接多個資料表以組合來自不同資料來源的資料。本文說明如何使用LINQ中的lambda表達式執行多表連接。
您嘗試連接三個表:Product、Category和ProductCategory。連線後,您希望取得一個組合所有相關類別屬性的單一類別。但是,您編寫的程式碼似乎無法產生預期的結果。
在LINQ lambda表達式中連結多個連接時,中間結果將表示為匿名類型。這意味著每個連接的結果將是一個新的匿名類型,它組合了已連接表的屬性。
要取得包含所有相關類別屬性的單一類,您需要指定要在最終結果中包含的屬性。這可以使用Select運算子來完成。
以下是修正後的程式碼:
<code>var categorizedProducts = product .Join(productcategory, p => p.Id, pc => pc.ProdId, (p, pc) => new { p, pc }) .Join(category, ppc => ppc.pc.CatId, c => c.Id, (ppc, c) => new { ppc, c }) .Select(m => new { ProdId = m.ppc.p.Id, // 或 m.ppc.pc.ProdId CatId = m.c.CatId // 其他赋值 });</code>
在此程式碼中,我們首先執行三個表之間的連接並將結果儲存在中間匿名類型中。然後,我們使用Select運算子將最終結果投影到新的匿名類型中,該類型包含所需的屬性(ProdId和CatId)。
您可以使用查詢語法而不是lambda表達式來進一步簡化程式碼:
<code>var categorizedProducts = from p in product join pc in productcategory on p.Id equals pc.ProdId join c in category on pc.CatId equals c.Id select new { ProdId = p.Id, // 或 pc.ProdId CatId = c.CatId // 其他赋值 };</code>
查詢語法更具可讀性,更容易理解,尤其是在涉及多個連接的複雜查詢中。
以上是如何使用 LINQ Lambda 表達式高效連接多個表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!