为什么这个 Linq 不编译?



在我的实际问题的简化版本中,我有两个表:UserMetadata。每个用户都可以通过 FKEY 关联不同数量的元数据条目。

这个 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"子句行替换为:

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 }

匿名类型的属性名称必须匹配。

您可以像这样指定名称:new { UserId = u.id, Key = "mystring" }

相关内容

  • 没有找到相关文章

最新更新