C# 查询列表的动态表达式
我有一个方法,它传递一个属于类型T的字段,然后像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, "
这样的操作符包含或等于或开始使用
到目前为止,我有以下代码:
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给了我正确的解决方案