5
我想做一個方法,像這樣的簽名:參數LINQ表達式幫助
Expression<Func<TSource, bool>> CreatePropertyFilter<TSource>(Expression<Func<TSource, string>> selector, string value, TextMatchMode matchMode);
基本上,它需要一個屬性選擇器(例如:p = p.Name
),一個字符串值,並且可以StartsWith
一個枚舉值,EndsWith
,Contains
,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不支持調用表達式。
對此有何建議?
謝謝!
謝謝,阿尼!正是我在尋找的東西,像魅力一樣工作!我在lambda表達式世界中太新鮮了。 – 2011-03-27 16:28:51