Использование выражений для выполнения строковых операций (содержит, startwith, ...) - PullRequest
1 голос
/ 08 ноября 2011

Я пытаюсь создать общий фильтр для обзоров данных, и я наткнулся на выражения. В этом примере для сравнения используются некоторые выражения:

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 ]

1 голос
/ 08 ноября 2011

Contains и StartsWith не операторы, это просто методы класса String, которые вы бы использовали Experssion.Call, чтобы включить их использование.

0 голосов
/ 04 января 2012

Вам не нужно добавлять собственные выражения. Просто напишите динамическое выражение linq в методе Where объекта, который реализует IQueryable.

Как это:

...
using System.Linq.Dynamic;
...

string searchKeyword = "ant";
IQueryable<Person> collection = GetPersonCollection();
collection.Where(string.Format("FirstName.Contains('{0}')"), searchKeyword);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...