使用SQL LIKE运算符的LINQ to Entities

RJ.*_*RJ. 5 c# linq asp.net linq-to-entities sql-like

我有这个:

query = query.Where(s => s.ShowTypeDescription == showTypeDescription);
Run Code Online (Sandbox Code Playgroud)

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

我将如何改变以上内容来说:

query = query.Where(s => s.ShowTypeDescription **LIKE** showTypeDescription);
Run Code Online (Sandbox Code Playgroud)

Nik*_*tev 13

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

   Contains() is translated LIKE '%term%'
   StartsWith() = LIKE 'term%'
   EndsWith()   = LIKE '%term'
Run Code Online (Sandbox Code Playgroud)


p.s*_*w.g 5

如果您只想在另一个字符串中找到子字符串,那么最好的方法是使用以下Contains方法:

query = query.Where(s => s.ShowTypeDescription.Contains(showTypeDescription));
Run Code Online (Sandbox Code Playgroud)

因为该String.Contains方法转换为:

CHARINDEX(ShowTypeDescription, @showTypeDescription) > 0
Run Code Online (Sandbox Code Playgroud)

这大致相当于:

ShowTypeDescription LIKE '%' + @showTypeDescription + '%'
Run Code Online (Sandbox Code Playgroud)

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

query = query.Where(s => SqlMethods.Like(s.ShowTypeDescription, showTypeDescription));
Run Code Online (Sandbox Code Playgroud)

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