我有一个方法可以传递属于类型T的字段,然后是Contains
或Equals
或StartsWith
到目前为止我有这个代码:
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());
当我运行它时,我收到错误:附加信息:参数表达式无效
基本上,我想查看Review中的字段是否满足条件。因此,例如,我会找到Review.ProductID contains "123"
或Review.ProductID startsWith "123"
等等。
答案 0 :(得分:2)
你几乎就在那里 - 但你需要传递一个lambda表达式..
var lam = Expression.Lambda<Func<Review, bool>>(containsExp, paramExp);
Console.WriteLine(queryable.Provider.CreateQuery<Review>(lam).Count());
你所拥有的是一个正文表达式,它在review
上运行,但没有指定 review
的值来自