动态SQL查询实体框架

Lea*_*oot 5 .net c# asp.net frameworks entity

我搜索了堆栈溢出的很多帖子给我一个答案,但我还不清楚.我只是在寻找一些简单的方法来构建动态查询.我能够在where子句中执行涉及单个表达式的简单查询,但是我找不到任何简单的方法来处理多个表达式.我有使用NHibernate标准API的经验,这对于快速和编译时安全的查询结构非常方便.我虽然在EntityFramework上会有类似的东西,但到目前为止还没有运气.除了手动构建字符串查询之外还有什么简单方法吗 看看下面的代码,我认为它应该工作,但事实并非如此.实际上它不会在多个lambda表达式上构建查询.我期待每个调用将在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>();
Run Code Online (Sandbox Code Playgroud)

SLa*_*aks 6

IQueryable是不可改变的; 你不能(直接)修改现有的查询IQueryable. query.Where返回IQueryable带有附加where子句的new .

你没有对这些新东西做任何事情IQueryable.

你需要写

query = query.Where(...)
Run Code Online (Sandbox Code Playgroud)