c# - 动态 SQL 查询 Entity Framework

标签 c# .net asp.net frameworks entity

我搜索了很多关于 stack overflow 的帖子以获得答案,但我还不清楚。我只是在寻找一些简单的方法来构建动态查询。我能够在 where 子句中执行涉及单个表达式的简单查询,但我找不到任何简单的方法来处理多个表达式。我有使用 NHibernate 标准 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>();

最佳答案

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

您没有对这些新的 IQueryable 做任何事情。

你需要写

query = query.Where(...)

关于c# - 动态 SQL 查询 Entity Framework ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7785786/

相关文章:

c# - 模拟 IObservable 的 yield 返回

c# - 谷歌云 API 语法

asp.net - Entity Framework 数据库初始化: Timeout when initializing new Azure SqlDatabase

c# - 在C#中比较两个数组后如何修复输出?

c# - WCF 无法将文件作为流返回

c# - 使变量成为类的实例

c# - 使用 LINQ 如何按 "calculated field"进行分组

asp.net - Objectdatasource和Gridview : Sorting, 分页、过滤

.net - 与 IP 地址和身份验证相关的 Twitter 错误

.net - 在 64 位进程中调用 DhcpGetClientInfo 失败