使用表达式执行字符串操作(包含,开头,...)

时间:2011-11-08 10:30:43

标签: vb.net string linq silverlight-4.0 expression

我正在尝试为数据概述创建一个通用过滤器,我遇到了表达式。在该示例中,一些表达式用于进行比较:

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}));

有人有这方面的经验吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

ContainsStartsWith不是运算符,它们只是类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);