이것은 힘든 문제 일 수 있습니다 ... 나는 당신이 자신의 운영자를 작성해야한다고 생각합니다.
(업데이트 :. 그래, 나는 그것을 테스트, 작동) :
string[] terms = new string[] { "blah", "woo", "fghwgads" };
var results = stuff.LikeAny(s => s.Title, terms);
P.S.
public static class QueryExtensions
{
public static IQueryable<TEntity> LikeAny<TEntity>(
this IQueryable<TEntity> query,
Expression<Func<TEntity, string>> selector,
IEnumerable<string> values)
{
if (selector == null)
{
throw new ArgumentNullException("selector");
}
if (values == null)
{
throw new ArgumentNullException("values");
}
if (!values.Any())
{
return query;
}
var p = selector.Parameters.Single();
var conditions = values.Select(v =>
(Expression)Expression.Call(typeof(SqlMethods), "Like", null,
selector.Body, Expression.Constant("%" + v + "%")));
var body = conditions.Aggregate((acc, c) => Expression.Or(acc, c));
return query.Where(Expression.Lambda<Func<TEntity, bool>>(body, p));
}
}
그런 다음에이 부를 수있는 QueryExtensions
클래스의 네임 스페이스에 System.Linq.Expressions
및 System.Data.Linq.SqlClient
네임 스페이스를 추가해야합니다.
이런 종류의 것은 실제로 전체 텍스트 검색에서 가장 잘 처리된다는 것을 알아야합니다. 'LIKE '% xyz %'버전이 실행되지만 성능은 떨어질 것입니다. – Aaronaught