将 linq to object 查询转换为 sql 查询(无 linq to sql 代码或数据上下文)
我如何将 linq 转换为对象查询或任何其他 Func 委托转换为字符串(例如 sql 语句
)
var cat_list = new List<Cat> { ... };
var myquery = cat_list.Where(x => x.Age > 2 && x.Name.Contains("Kitty"));
现在 myquery 是 IEnumerable
。我怎样才能将其转换为类似这样的东西
"Age > @p1 AND Name LIKE @p2"
我怎样才能实现这一点?
How can i convert linq to object query or any other Func delegate to string like sql statements
for example
var cat_list = new List<Cat> { ... };
var myquery = cat_list.Where(x => x.Age > 2 && x.Name.Contains("Kitty"));
Now myquery is IEnumerable<Cat>
. how can i convert this to simply something like this
"Age > @p1 AND Name LIKE @p2"
how can i achieve this ??
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
做这样的事情并不简单。查看系列文章 构建 IQueryable提供商,作者:Matt Warren。他使用的所有代码也可以作为库提供。这应该可以帮助您入门。
Doing something like that is not simple. Have a look at the series of articles Building an IQueryable provider by Matt Warren. All the code he uses is available as a library too. That should help you get started.
您可以编写一个表达式树解析器并生成 sql。您的描述包含错误 -
myquery
不是IQueryable
,它是IEnumerable
。正如您正确标记的那样,这是 linq-to-objects,而不是 linq-to-sql。构建查询的调用中没有任何信息。You could write an expression tree parser and generate the sql. Your description contains a fault -
myquery
isn'tIQueryable<Cat>
, it is anIEnumerable<Cat>
. As you tagged it correctly, this is linq-to-objects, not linq-to-sql. There is no information in the calls to construct a query.查看 DataContext.GetCommand() 方法,该方法传递一个 IQueryable 对象并返回与查询相对应的 DbCommand 对象。 DbCommand 对象的 CommandText 属性显示查询的文本。
Check out the method DataContext.GetCommand() which is passed an IQueryable object and returns the DbCommand object that corresponds to the query. The CommandText property of the DbCommand object shows the text of the query.