我正在寻找一种从字符串构建 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 标头的方法

NAudio在改变音高而不是文件时寻找一种从流中读取的方法

IQueryable 如何构建查询? [复制]

寻找一种从 <a href> 标签中检索信息的方法。例如。 <a href="www.facebook.com"> [重复]