यह एक कठिन हो सकता है ... मुझे लगता है कि आपको अपना ऑपरेटर लिखना होगा।
(अद्यतन:। हां, मैं यह परीक्षण किया है, यह काम करता है):
string[] terms = new string[] { "blah", "woo", "fghwgads" };
var results = stuff.LikeAny(s => s.Title, terms);
पी.एस.
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