我正在寻找一种从字符串构建 IQueryable 查询的方法
Posted
技术标签:
【中文标题】我正在寻找一种从字符串构建 IQueryable 查询的方法【英文标题】:I'm looking for a way to build a IQueryable query from a string 【发布时间】:2015-07-24 02:03:30 【问题描述】:我想从一个字符串(它将来自一个表)构建一个 IQueryable 查询。我想要 IQueryable 的原因是我想使用 OrderBy、Take 和 Skip 来进行分页。我正在使用带有 DBContext 的实体框架,所以我查看了实体 SQL,但它看起来像是将查询限制为一个类。
我想做的是:
string sql = GetQueryFromDatabase();
IQueryable q = PerformMagicToMakeStringIQueryable(sql);
q = q.OrderBy(somefield).Skip(5).Take(10);
从那里我很好,我知道如何找出查询中有哪些字段并做我需要的。
想法?
谢谢,
约翰
【问题讨论】:
不要相信没有某种 ORM 就可以做到这一点。可以看看building an iqueryable provider 谢谢。这意味着解析 SQL 字符串以构建表达式树是必要的。有没有方便的代码从 T-SQL 语句构建 linq 表达式树? 我不知道。您通常会根据连接器(目标 DMBS 连接器)执行针对数据库的逆向 (LINQ-to-SQL) 只是大声思考,但不是将 storinq sql 存储为字符串,您可以将表达式树存储为字符串吗?我在谷歌搜索中得到的第一个结果是:***.com/questions/217961/… 使用 EF msdn 支持 ASP.NET Web API 2 中的 OData 查询选项 【参考方案1】:你可以使用一个叫做 DynamicLinq 的东西。
有很多不同的版本,因为 MS 发布了原始源代码,并且修改了无数次:
这是一个带有文档的:
http://dynamiclinq.azurewebsites.net/
以下是其他:
https://www.nuget.org/packages?q=dynamic+linq
【讨论】:
以上是关于我正在寻找一种从字符串构建 IQueryable 查询的方法的主要内容,如果未能解决你的问题,请参考以下文章
寻找一种从 select 语句的后半部分排除 select 语句变量的方法
寻找一种从传入的 http 请求中获取 HTTP Digest Authentication 标头的方法
寻找一种从 <a href> 标签中检索信息的方法。例如。 <a href="www.facebook.com"> [重复]