Я пытаюсь создать расширение ContainsAny и ContainsAll, чтобы я мог в основном сделать следующее
string[] words = keywords.split(' ');
from c in comments
where c.Text.ContainsAny(words)
select c
до сих пор мне удалось сделать следующее:
У меня есть эти два расширения для ands и ors
public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> expr1, Expression<Func<T, bool>> expr2) {
var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
return Expression.Lambda<Func<T, bool>>(Expression.OrElse(expr1.Body, invokedExpr), expr1.Parameters);
}
public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> expr1, Expression<Func<T, bool>> expr2) {
var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
return Expression.Lambda<Func<T, bool>>(Expression.AndAlso(expr1.Body, invokedExpr), expr1.Parameters);
}
и тогда у меня есть:
Expression<Func<Entities.Comment, bool>> predicate = c => false;
foreach (string word in query.Split(' ')) {
string w = word;
predicate = predicate.Or(c => c.Text.Contains(w));
}
q = q.Where(predicate);
Теперь все это прекрасно работает, но я не уверен, как извлечь эту функциональность в универсальное расширение, которое я могу затем использовать против любого объекта.
Любая помощь будет наиболее ценной