本文將介紹使用LINQ進行INNER JOIN的小技巧。
【問題描述】
最近跟好友Kazuya討論到在LINQ中進行多個屬性進行內部連結(INNER JOIN)時,發生【join 子句中其中一個運算式的型別不正確。呼叫 'Join' 時發生型別推斷失敗】的問題。
原本筆者以為是資料行型別不一致,利用Entity Framework 的DB First轉成類別時導致型別不正確,但檢查發現似乎不是資料行的問題,因為要JOIN的資料行型別都是相同,只是資料行名稱不同。
【解決方式】
當您使用Entity Framework DB First方式把資料表轉成Entity Data Model時,資料庫中的資料表物件會被產生相對應的實體(Entity),如果您要針對不同名稱的屬性在LINQ中做INNER JOIN就可能遇到本文所提到的錯誤。
您可以將Entity Data Model中您要用來做JOIN的的屬性名稱改為相同,您在EDMX所修改的屬性名稱並不會影響到資料表。
接著修改程式把t1要JOIN的屬性改為新的屬性名稱(reg_type)再重新建置就可以順利成功了。
若您不想修改EDMX中實體的屬性,也可以在JOIN時,給定屬性一致的別名,一樣可以達到相同效果。
【參考資料】