C# 如何从SQL表达式返回IQueryable?

C# 如何从SQL表达式返回IQueryable?,c#,sql,linq,C#,Sql,Linq,尝试使用C#从数据库查询时,我遇到以下错误: LINQ to Entities无法识别方法“MyProject.Models.DB.Department getDepartment()”方法,并且无法将此方法转换为存储表达式。 在我的控制器中,我有: var query = db.Activities.AsQueryable(); query = query.Where(x => rs.department.Contains(x.getDepartment().id)); 在我的模型中,

尝试使用C#从数据库查询时,我遇到以下错误:

LINQ to Entities无法识别方法“MyProject.Models.DB.Department getDepartment()”方法,并且无法将此方法转换为存储表达式。

在我的控制器中,我有:

var query = db.Activities.AsQueryable();
query = query.Where(x => rs.department.Contains(x.getDepartment().id));
在我的模型中,我使用以下方法返回
活动
的正确
部门
。我知道问题是我在执行
.First()
时正在执行查询,但我找不到方法将其作为
IQueryable
结果返回:

public partial class Activity
{
   public Department getDepartment()
    {
        return db.Departments.SqlQuery( "" +
            "SELECT * FROM " +
                "[snt].[Departments] " +
            "INNER JOIN( " +
                "SELECT " +
                    "[Users].departments_id AS id " +
                "FROM " +
                    "[snt].[Users], " +
                    "[snt].[People], " +
                    "[snt].[EventPerson], " +
                    "[snt].[EventPersonTask], " +
                    "[snt].[Tasks], " +
                    "[snt].[Events], " +
                    "[snt].[Activities] " +
                "WHERE " +
                    "[snt].[Activities].id = {0} AND " +
                    "[snt].[Events].id = [snt].[Activities].events_id AND " +
                    "[snt].[EventPerson].events_id = [snt].[Events].id AND " +
                    "[snt].[EventPerson].people_id = [snt].[People].id AND " +
                    "[snt].[EventPersonTask].tasks_id = [snt].[Tasks].id AND " +
                    "[snt].[EventPersonTask].eventperson_id = [snt].[EventPerson].id AND " +
                    "[snt].[Tasks].name = 'owner' AND " +
                    "[snt].[Users].is_active = 1 AND " +
                    "[snt].[Users].people_id = [snt].[People].id" +
            " ) AS x " +
            "ON " +
                "x.id = [Departments].id", this.id).First();
    }
}

我不是说这是可能的,但我首先要删除对
getDepartment()
函数中
.First()
的调用
.First()
将执行查询,这显然不是您想要的。我已经测试了该方法,它工作正常,它返回预期的
部门
,问题出现在我的控制器中,当我尝试在另一个查询中使用此查询时。。。如第一段代码所示。我得到了我试图避免的错误。IQueryable表示一个查询
SqlQuery
已返回IQueryable。但是,这段代码的要点是什么(不要介意过时的连接语法)?这些连接应该由ORM自己根据实体之间的关系生成。ORM的查询可能也会更简单,更容易优化-子查询不是必需的StackOverflow的好处是,你总能找到那些鼓励你的人,他们会给出很好的评论,而不是实际的帮助,比如“obslote连接”。。。真的很高兴能来问一个问题,并感到沮丧,而不是收到一个实际的答案,你的问题。