2016-03-01 35 views
0

我知道有很多關於此的問題。我已經閱讀了它們,並且爲匿名類型屬性創建了相同的名稱和類型。我仍然在標題中看到錯誤。舊的「聯接子句中的一個表達式的類型不正確」

代碼是:

var v = (from o in dataContext.pp_orders.Where(p => p.ID > lastOrderID).OrderBy(p => p.DueDate) 
       join part in dataContext.pp_parts on o.ProductID equals part.ProductID 
       join op in dataContext.pp_operations on new { ID2 = part.ID } equals new { ID2 = (int)op.PartID } 
       select (x => new JobModel { o = o, op = op })); 

的錯誤是在第二次加入。

[更新]

看來加盟平等是正確的。此查詢有效(無錯誤):

var v = (from o in dataContext.pp_orders.Where(p => p.ID > lastOrderID).OrderBy(p => p.DueDate) 
       join part in dataContext.pp_parts on o.ProductID equals part.ProductID 
       join op in dataContext.pp_operations on part.ID equals (int)op.PartID 
       select op); 

問題出在select子句。我不明白爲什麼它會在該select子句的標題中給出錯誤。

select (x => new JobModel { o = o, op = op }) 
+1

你就不能使用'加入dataContext.pp_operations運算的一部分。 ID等於(int)op.PartID'? –

+0

如果我使用,我得到相同的錯誤,我明白,因爲成員ID和PartID不具有相同的名稱。但我不明白爲什麼我得到明確的成員分配錯誤新{ID2 = ...} –

+0

你是100%確定'part.ID'是一個'int'而不是可空?順便說一句,join子句中的屬性不必具有相同的名稱,所以'part.ID equals(int)op.PartID'應該可以工作。事實上,你將它們投影到一個匿名類型意味着_type_必須具有相同的屬性名稱,他們這樣做。這是問題的_type_,而不是屬性名稱。 –

回答

1

您在混合查詢語法和方法語法。方法語法使用lamdbas項目數據,而查詢語法使用更自然的類似SQL的語法:

改變你的選擇:

select new JobModel { o = o, op = op } 
相關問題