我正在尝试在启用了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();
答案 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; 部分。你肯定从该部分得到提示。