在LinqPad中使用带有PredicateBuilder的字符串where子句来创建动态where子句

时间:2014-09-06 17:30:59

标签: c# linq sql-server-2008-r2 linqpad

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

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

当我尝试执行它时,查询在LinqPad中抛出此错误:

  

无法隐式转换类型'字符串'至   '&System.Linq.Expressions.Expression GT;'

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

我正在尝试为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();

1 个答案:

答案 0 :(得分:2)

好的尝试这样的事情。

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

正如您所说,您使用了 linqfilter 字符串。这意味着你需要动态构建表达式。所以这里有一个good article in codeproject。有关您的信息,请参阅该文章中的&#34;动态位置&#34; 部分。你肯定从该部分得到提示。