繁体   English   中英

在LinqPad中将字符串where子句与PredicateBuilder一起使用以创建动态where子句

[英]Using a string where clause with PredicateBuilder in LinqPad for creating dynamic where clause

我试图在启用了PredicateBuilder的LinqPad中创建动态查询。

我首先为与“(orderid> 100 AND customerid <= 100)”之类的查询的where子句相对应创建一个字符串,然后尝试在PredicateBuilder中构建LINQ查询时使用此字符串。 动态查询由本文末尾给出的代码中的变量'dynamicResult'表示。 该查询位于SQL Server 2008 R2中的Northwind数据库的Orders表上。

当我尝试执行查询时,该查询在LinqPad中引发此错误:

无法将类型'string'隐式转换为'System.Linq.Expressions.Expression>'

问题:如何在PredicateBuilder中使用类似于'((orderid> 100 AND customerid <= 100)')字符串的过滤器? 尝试执行以下代码时,我从LinqPad中选择了“ C#语句”。

我正在尝试为LINQ查询动态构建where条件。

int? orderParam = 100;
string orderOperator = ">=";
string linqFilter = "";
linqFilter= String.Format("{0} {1} {2}", "o.OrderID", orderOperator, orderParam);
linqFilter.Dump();

 var predicate = PredicateBuilder.False<Orders>();
 predicate = (linqFilter);
 var dynamicResult = from o in Orders.Where(predicate) select o;
 dynamicResult.Dump();

好吧,尝试这样的事情。

 var predicate = PredicateBuilder.False<Orders>();
 predicate = predicate.And(o => o.OrderID >= 100);
 var dynamicResult = from o in Orders.Where(predicate) select o;

如您所说,您使用了linqfilter字符串。 这意味着您需要动态构建表达式。 因此,这里是codeproject中的一篇好文章 对于您,请参阅该文章中的“动态位置”部分。 您绝对可以从该部分获得提示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM