Справка по параметризованным выражениям Linq

Я хочу создать метод с такой подписью:

Expression<Func<TSource, bool>> CreatePropertyFilter<TSource>(Expression<Func<TSource, string>> selector, string value, TextMatchMode matchMode);

По сути, он принимает селектор свойств (например: p = p.Name ), a строковое значение и значение перечисления, которое может быть StartsWith , EndsWith , Содержит , Exact ; для параметров сопоставления текста.

Как я могу реализовать метод таким образом, чтобы LINQ2Entities мог понять? Я уже реализовал этот метод, используя вложенные выражения вызова, например:

Expression<Func<string, bool>> comparerExpression;

switch (matchMode)
{
    case TextMatchMode.StartsWith:
       comparerExpression = p => p.StartsWith(value);
       break;
    case TextMatchMode.EndsWith:
       comparerExpression = p => p.EndsWith(value);
       break;
    case TextMatchMode.Contains:
       comparerExpression = p => p.Contains(value);
       break;
    default:
       comparerExpression = p => p.Equals(value);
       break;
}

var equalityComparerParameter = Expression.Parameter(typeof(IncomingMail), null);
var equalityComparerExpression = Expression.Invoke(comparerExpression, Expression.Invoke(selector, equalityComparerParameter));
var equalityComparerPredicate = Expression.Lambda<Func<IncomingMail, bool>>(equalityComparerExpression, equalityComparerParameter);

Проблема в том, что Linq2Entities не поддерживает выражения вызова.

Есть какие-нибудь советы по этому поводу?

Спасибо!

5
задан Ani 27 March 2011 в 06:10
поделиться