Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查询列表的动态表达式_C#_Dynamic - Fatal编程技术网

C# 查询列表的动态表达式

C# 查询列表的动态表达式,c#,dynamic,C#,Dynamic,我有一个方法,它传递一个属于类型T的字段,然后像这样的操作符包含或等于或开始使用 到目前为止,我有以下代码: IQueryable<Review> queryable = this.rvCurReviewSet.AsQueryable<Review>(); var paramExp = Expression.Parameter(typeof(Review), "review"); var propExp = Expression.Property(paramExp, "

我有一个方法,它传递一个属于类型T的字段,然后像
这样的操作符包含
等于
开始使用

到目前为止,我有以下代码:

IQueryable<Review> queryable = this.rvCurReviewSet.AsQueryable<Review>();

var paramExp = Expression.Parameter(typeof(Review), "review");
var propExp = Expression.Property(paramExp, "ProductID");
MethodInfo method = typeof(string).GetMethod("Contains", new[] { typeof(string) });
var val = Expression.Constant(input, typeof(string));
var containsExp = Expression.Call(propExp, method, val);

Console.WriteLine(queryable.Provider.CreateQuery<Review>(containsExp).Count());
IQueryable queryable=this.rvcurrenviewset.AsQueryable();
var paramExp=Expression.Parameter(typeof(Review),“Review”);
var propExp=Expression.Property(paramExp,“ProductID”);
MethodInfo method=typeof(string).GetMethod(“Contains”,new[]{typeof(string)});
var val=表达式.常量(输入,类型(字符串));
var containsExp=Expression.Call(propExp,method,val);
Console.WriteLine(queryable.Provider.CreateQuery(containsExp.Count());
当我运行此命令时,我得到一个错误:附加信息:参数表达式无效


基本上,我想看看审查中的字段是否满足标准。例如,我会发现
Review.ProductID包含“123”
Review.ProductID以“123”
开始,依此类推。

您就快到了,但需要传递一个lambda表达式

var lam = Expression.Lambda<Func<Review, bool>>(containsExp, paramExp);
Console.WriteLine(queryable.Provider.CreateQuery<Review>(lam).Count());
var lam=Expression.Lambda(containsExp,paramExp);
Console.WriteLine(queryable.Provider.CreateQuery(lam.Count());

您拥有的是一个主体表达式,它在
review
上运行,但没有指定
review
的值来自何处。

是否有理由要求您“手动”构建表达式,而不是使用标准LINQ API?类似于
myProducts.Where(p=>p.ProductID.Contains(“123”)@AGB我想OP想要做一个简单的解析器/求值器,运算符将对应一个方法。@AGB是的,就是这样。我有一个DropDownList,它包含、StartsWith、Equals等,我希望用户能够从列表中进行选择,它将根据这些内容创建一个表达式。为了简单起见,我在这个例子中使用了Contains。
rvcurrenviewset
的类型是什么?它是
列表
的一个实例吗?我将它转换为
列表
,但下面的@Rob给了我正确的解决方案