Csharp/C#教程:Linq to Sql任何关键字搜索查询分享


Linq to Sql任何关键字搜索查询

我的应用程序中有一个案例,用户可以搜索术语列表。 搜索需要按以下顺序进行三次传递:

从本质上讲,我如何在Linq to Sql中告诉它这样做:

select * from stuff s where s.Title like '%blah%' || s.Title like '%woo&' || s.Title like '%fghwgads%' || s.Title like... 

等等?

这可能是一个艰难的…我认为你必须编写自己的运算符。

更新:是的 ,我测试了它,它的工作原理。)

 public static class QueryExtensions { public static IQueryable LikeAny( this IQueryable query, Expression> selector, IEnumerable 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>(body, p)); } } 

然后你可以这样称呼:

 string[] terms = new string[] { "blah", "woo", "fghwgads" }; var results = stuff.LikeAny(s => s.Title, terms); 

PS您需要将System.Linq.ExpressionsSystem.Data.Linq.SqlClient命名空间添加到QueryExtensions类的命名空间。

上述就是C#学习教程:Linq to Sql任何关键字搜索查询分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1028281.html

(0)
上一篇 2022年1月10日
下一篇 2022年1月10日

精彩推荐