【问题标题】:Entity SQL selecting from more then 3 tables从超过 3 个表中选择的实体 SQL
【发布时间】:2012-05-20 14:20:12
【问题描述】:

我是实体框架的新手,目前正在努力使用这种编程范式。我有这个查询,我想用 Entity SQL 编写。

SELECT      f.id,  f.personName,   c.Category,    j.busCode,    s.description,         f.StartDate, (SELECT COUNT(*) FROM Analysis WHERE id = f.id) As numOfAnalysis
FROM forms f
INNER JOIN Jobs j  ON f.id = j.id
INNER JOIN category c  ON j.categoryid = c.categoryid
INNER JOIN stage s  ON f.stageid = s.stageid
WHERE j.busCode NOT IN ('xyz', 'YYY')
ORDER BY startDate

我可以从两个表中获取记录,但是当我使用导航属性添加第三个表时,我得到错误表类别未在当前上下文中加载。我正在使用.net 3.5。请记住,EDM V2 没有外键,我认为遍历表关系的唯一方法是导航属性。

任何帮助将不胜感激。

谢谢

Coder74

【问题讨论】:

  • 为什么不向我们展示您的代码?我们怎么可能猜到这条消息的原因?
  • 除了上面的评论——为什么还需要使用Entity SQL而不是Linq To Entities?
  • 如果你使用 .Net 3.5 linq-to-sql 可能是更好的选择。但是,导航属性并不是唯一的方法。您始终可以使用 linq join 语句。

标签: entity-framework entity


【解决方案1】:

如果你使用应该可以挂载这个 Linq 查询。 我试图拼凑起来,但在匆忙中并没有这样复杂的测试。 您可以将此参考用作支持:http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b

var result  = (from f in forms
            join j in Jobs on f.id equals j.id
            join c in Category on j.categoryid equals c.categoryid
            join s in stage on f.stageid equals s.stageid
            join a in Analysis on a.id equals f.id
            where !(new int[] { 'xyz', 'YYY' }).Contains(j.busCode)
            orderby f.StartDate
            select {
                id =f.id,
                personName = f.personName,   
                Category = c.Category,
                busCode = j.busCode,
                description = s.description,
                StartDate = f.StartDate, 
                numOfAnalysis = a.Count()
            }).ToList()

胡里奥·斯派德

W&S 互联网解决方案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-04
    • 2011-07-06
    • 2020-03-10
    • 1970-01-01
    • 2016-10-05
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多