2016-06-08 77 views
0

您能否幫助我理解此錯誤消息。我確實做錯了,但是什麼?LinQ:具有多個列標識符的多個連接

連接子句中的一個表達式的類型不正確。在「加入」的調用中,類型推斷失敗。

Res.AddRange(from jh in db.Job 
      join jd in db.JobDetail on jh.number equals jd.number 
      join js in db.JobSection on new { jd.number, jd.ref, jd.product } equals new { js.number, js.ref, js.Product } 
      join oh in db.Order on jd.ref equals oh.ref 
      join bh in db.Buyer on jh.id equals bh.id 
      where jh.dateModify >= InputDate 
      select jh); 

從該行

join js in db.JobSection on new { jd.number, jd.ref, jd.product } equals new { js.number, js.ref, js.Product } 
+0

它更改爲新的{jd.number,jd.ref,產品= jd.product}等於新{js.number,js.ref,js.Product} - 屬性的名稱應完全匹配匿名類型。 – Evk

+0

當我這樣做時,我有同樣的錯誤:將js加入到新的{a = jd.number,b = jd.ref,c = jd.product}等於new {a = js.number,b = js的db.JobSection中。 ref,c = js.Product} –

+0

然後檢查這些列的_types_(數字,ref等)是否完全匹配。說如果一個是可空的int而另一個只是int(或者簡稱,無論) - 它將不起作用。所有列類型和名稱應與_exactly_匹配。 – Evk

回答

0

(見註釋)來的誤差EVK的幫助下,我找到了解決辦法

  1. 我需要命名我的變量
  2. 我需要尊重類型(即使可以爲空)

所以,正確的辦法是

Res.AddRange(from jh in db.Job 
      join jd in db.JobDetail on jh.number equals jd.number 
      join js in db.JobSection on new { a = jd.number, b = (int?)jd.ref, c = jd.product } equals new { a = js.number, b = js.ref, c = js.Product } 
      join oh in db.Order on jd.ref equals oh.ref 
      join bh in db.Buyer on jh.id equals bh.id 
      where jh.dateModify >= InputDate 
      select jh);