使用LINQ進行INNER JOIN的小技巧

本文將介紹使用LINQ進行INNER JOIN的小技巧。

問題描述

最近跟好友Kazuya討論到在LINQ中進行多個屬性進行內部連結(INNER JOIN)時,發生【join 子句中其中一個運算式的型別不正確。呼叫 'Join' 時發生型別推斷失敗】的問題。

image

原本筆者以為是資料行型別不一致,利用Entity Framework 的DB First轉成類別時導致型別不正確,但檢查發現似乎不是資料行的問題,因為要JOIN的資料行型別都是相同,只是資料行名稱不同。

image

解決方式

當您使用Entity Framework DB First方式把資料表轉成Entity Data Model時,資料庫中的資料表物件會被產生相對應的實體(Entity),如果您要針對不同名稱的屬性在LINQ中做INNER JOIN就可能遇到本文所提到的錯誤。

image

您可以將Entity Data Model中您要用來做JOIN的的屬性名稱改為相同,您在EDMX所修改的屬性名稱並不會影響到資料表。

image

接著修改程式把t1要JOIN的屬性改為新的屬性名稱(reg_type)再重新建置就可以順利成功了。

image

若您不想修改EDMX中實體的屬性,也可以在JOIN時,給定屬性一致的別名,一樣可以達到相同效果。

image

參考資料

- HOW TO:執行內部聯結 (C# 程式設計手冊)

- .edmx 檔案概觀 (Entity Framework)