【问题标题】:LINQ to EF Cross Join issueLINQ to EF 交叉连接问题
【发布时间】:2013-05-24 22:39:43
【问题描述】:

我正在使用实体框架 5。

下面是我成功运行的 SQL 查询:

Select person.pk 
from person, job
Where 
person.jobId= job.pk 
and 
job.Description = 'CEO'

我已更改上述查询中的表名和列名。

现在,当我将上面的查询转换为下面的 LINQ 时:

from person in Context.Person
from job in Context.Job
where
  person.jobId== job.PK &&
  job.Description == "CEO"
select new {
  person.PK
};

但是上面的 LINQ 给了我一个例外:

无法创建“Models.Job”类型的常量值。 仅支持原始类型(“例如 Int32、String 和 Guid”) 在这种情况下。

LINQ 看起来很简单,但我无法弄清楚我缺少什么。

这可能是重复的,但与此类似的所有问题都不同,没有一个解决了这个问题。

任何帮助将不胜感激。

【问题讨论】:

  • 我很好奇你为什么不使用连接语法来连接:from person in Context.Person join job in Context.Job on person.jobId equals job.PK where job.Description == "CEO" select new { person.PK }?
  • 更好的办法是定义外键并使用导航属性,这样连接将由 EF 自动为您处理。
  • 我阅读了一些关于交叉连接的帖子,我相信这是他们在123 中遵循的语法。就此而言,我不太擅长 SQL 或 LINQ。我想我需要做更多的阅读和练习。

标签: linq linq-to-entities entity-framework-5


【解决方案1】:

那个 SQL 正在执行一个连接,你为什么不在你的 Linq 中执行一个呢?

另外,如果您只想要一个字段,我不确定您为什么要投射到匿名类型,只需选择该字段(将映射到 List<T> ,其中 T 是您的 PK 的类型字段)。

试试这个:

from person in Context.Person
join job in Context.Job on person.jobID equals job.PK
where job.Description == "CEO"
select person.PK;

【讨论】:

  • 非常感谢。这行得通。我阅读了一些关于交叉连接的帖子,我相信这是他们遵循的语法123。就此而言,我不太擅长 SQL 或 LINQ。我想我需要做更多的阅读和练习。
猜你喜欢
  • 1970-01-01
  • 2013-04-12
  • 1970-01-01
  • 1970-01-01
  • 2011-01-13
  • 1970-01-01
  • 2014-03-08
  • 2011-09-05
  • 2021-07-05
相关资源
最近更新 更多