使用SQL LIKE运算符的LINQ to Entities

时间:2013-06-13 21:50:54

标签: c# asp.net linq linq-to-entities sql-like

我有这个:

query = query.Where(s => s.ShowTypeDescription == showTypeDescription);

为了构建动态SQL,为了不同的变量多次。

我如何改变上述说法:

query = query.Where(s => s.ShowTypeDescription **LIKE** showTypeDescription);

2 个答案:

答案 0 :(得分:13)

query = query.Where(s => s.ShowTypeDescription.Contains(showTypeDescription));

   Contains() is translated LIKE '%term%'
   StartsWith() = LIKE 'term%'
   EndsWith()   = LIKE '%term'

答案 1 :(得分:5)

如果你想要的只是在另一个字符串中找到一个子字符串,最好的方法是使用Contains方法:

query = query.Where(s => s.ShowTypeDescription.Contains(showTypeDescription));

因为String.Contains方法转换为:

CHARINDEX(ShowTypeDescription, @showTypeDescription) > 0

大致相当于:

ShowTypeDescription LIKE '%' + @showTypeDescription + '%'

更新:在Linq-to-SQL中,您可以使用SqlMethods.Like方法:

query = query.Where(s => SqlMethods.Like(s.ShowTypeDescription, showTypeDescription));

这将直接转换为SQL LIKE运算符。但请注意,这不适用于Linq-to-SQL查询之外。尝试在其他上下文中调用此方法将引发异常。