我正在尝试为数据概述创建一个通用过滤器,我遇到了表达式。在该示例中,一些表达式用于进行比较:
return Expression.Equal(left, right);
return Expression.GreaterThan(left, right);
return Expression.GreaterThanOrEqual(left, right);
return Expression.LessThan(left, right);
return Expression.LessThanOrEqual(left, right);
return Expression.NotEqual(left, right);
对于日期和整数值,它们都是我需要的,但是当涉及到字符串时,用户将需要其他过滤器功能。所以我想添加“包含和开始”的可能性。但看看“表达式”,它并没有给我这种可能性。我会添加一些自定义表达式,但我找不到任何与此相关的内容。返回的表达式在这段代码中使用:
Expression.Call(typeof (Queryable),"Where",new[] {list.ElementType},list.Expression,Expression.Lambda<Func<T, bool>>(exp, new[] {pe}));
有人有这方面的经验吗?
提前致谢。
答案 0 :(得分:1)
Contains
和StartsWith
不是运算符,它们只是类String
的方法,您可以使用Experssion.Call
来包含这些的使用。
答案 1 :(得分:0)
您不必添加自定义表达式。只需在实现Where
的对象的IQueryable
方法中编写动态linq表达式。
像这样:
...
using System.Linq.Dynamic;
...
string searchKeyword = "ant";
IQueryable<Person> collection = GetPersonCollection();
collection.Where(string.Format("FirstName.Contains('{0}')"), searchKeyword);