动态SQL查询Entity Framework

5

我在Stack Overflow上搜索了许多帖子,但仍不清楚。我只是想找到一些简单的方法来构建动态查询。我能够执行涉及where子句中单个表达式的简单查询,但我无法找到任何处理多个表达式的简单方法。我有使用NHibernate criteria API的经验,这对于快速和编译时安全的查询构建非常方便。我认为EntityFramework上也应该有类似的东西,但迄今为止没有运气。除手动构建字符串查询外,还有什么简单的方法吗?请看下面的代码,我认为它应该工作,但它并没有。实际上,它不会根据多个lambda表达式构建查询。我期望每个where调用都会向where子句添加一个AND表达式。我错过了什么吗?

var query = Entities.Current.Jobs.AsQueryable<Job>();

            if (!string.IsNullOrEmpty(keywords))
            {
                query.Where(j => j.Title.Contains(keywords) || j.Description.Contains(keywords));
            }

            if (industryId > 0)
            {
                query.Where(j => j.IndustryId == industryId);
            }

            if (countyId > 0)
            {
                query.Where(j => j.CountyId == countyId);
            }

            return query.ToList<Job>();
1个回答

6

IQueryable是不可变的;您不能(直接)修改现有IQueryable的查询。 query.Where返回一个带有额外where子句的新IQueryable

您没有对这些新的IQueryable做任何操作。

您需要编写:

query = query.Where(...)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接