在我的實際問題的簡化版本中,我有兩個表格:User
和Metadata
。 每個用戶可以通過FKEY獲得與它們相關的各種數量的元數據條目。爲什麼Linq不能編譯?
這Linq的編譯罰款:
var user = from u in Context.Users
join m in Context.Metadata
on u.id equals m.userid
select new { u.id, m.value }
但是,如果我取代 '的' 條款線路是:
on new { u.id } equals new { m.userid }
它失敗,此錯誤編譯:
error CS1941: The type of one of the expressions in the join clause is incorrect. Type inference failed in the call to 'Join'.
有誰知道爲什麼?
而獎勵積分:
我最終試圖完成這樣的查詢:
var user = from u in Context.Users
join m in Context.Metadata
on new { u.id, "mystring" } equals new { m.userid, m.key }
select new { u.id, m.value }
的使用注意事項字面"mystring"
的。不用說,這也行不通。
謝謝!
編輯: SLaks的答案的工作,但爲了什麼他在談論完全清楚,最終on
條款的作品看起來像:
on new { id = u.id, key = "foo" } equals new { id = mu.userid, key = m.key }
爲什麼你需要比不上匿名對象的字段自己? – zerkms 2011-05-17 00:44:20
@zrkms:加入兩個領域。 – SLaks 2011-05-17 00:45:25
@SLaks:omg,不知道linq不能這麼說:-S – zerkms 2011-05-17 00:51:00