在LinqPad中使用PredicateBuilder中的where子句用于创建动态Where子句
我想在启用PredicateBuilder的LinqPad中创建动态查询。在LinqPad中使用PredicateBuilder中的where子句用于创建动态Where子句
我首先创建一个字符串,对应于像'(orderid> 100和customerid < = 100)'这样的查询的where子句,然后尝试在构建PredicateBuilder的LINQ查询时使用此字符串。动态查询由本帖末尾的代码给出的变量'dynamicResult'表示。该查询位于SQL Server 2008 R2中Northwind数据库的Orders表上。
查询抛出LinqPad这个错误,当我尝试执行它:
不能键入 '串' 隐式转换为 '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字符串。这意味着您需要动态构建表达式。因此,这里是一个good article in codeproject。请参阅该文章中的“Dynamic Where”部分。你肯定会从该部分获得提示。
我想在PredicateBuilder的代码片段中使用像linqFilter这样的字符串。在你的例子中,你没有使用一个字符串,而是一个表达式。 – Sunil 2014-09-06 19:56:30
@Sunil:我已经更新了我的答案...只要通过那篇文章。 – 2014-09-06 21:07:39
我想,PredicateBuilder需要'IQueryable'。所以试试这一行 - 'var dynamicResult = from Orders.AsQueryable()。where(predicate)select o;'。只需检查并让我们知道... –
2014-09-06 18:32:39
我认为问题出现在这条线上:predicate =(linqFilter),其中右侧变量是一个字符串被分配给另一个类型。你知道如何解决这个问题吗? – Sunil 2014-09-06 18:39:36