LINQ2SQL LIKE命令用于短语

时间:2010-09-20 02:10:27

标签: .net linq linq-to-sql

我正在尝试检索包含“Britney Spears”的字符串列表,这就是我使用的

from p in Objects
where p.Title.Contains("Britney Spears")
select p

这很好,但是如果我想选择“Britney Jean Spears”,“Britney'Sexy'Spears”这样的标题它不起作用,那么我的问题是我如何在两者之间插入一个通配符'%'布兰妮斯皮尔斯在进行LINQ2SQL搜索时?感谢。

此致 安迪。

3 个答案:

答案 0 :(得分:13)

您可以使用SqlMethods.Like方法来实现此目的。

from p in Objects
where SqlMethods.Like(p.Title, "Britney% Spears")
select p

答案 1 :(得分:0)

只需使用StartsWith()EndsWith()来模拟模式。 AFAIK,LINQ-to-SQL不支持通配符。

from p in Objects
where p.Title.StartsWith("Britney") && c.Title.EndsWith("Spears")
select p;

否则,如果您的模式更复杂,则可以直接执行查询。

db.ExecuteQuery<MyObject>("SELECT * "
                        + "FROM Objects "
                        + "WHERE Title LIKE 'Britney%Spears'");

答案 2 :(得分:-1)

完全按照你的直接SQL

进行操作

您可以使用like子句提供特殊字符,例如“。”,“%”和“[]”

如果这还不够好,那么你可以使用正则表达式,但要小心,因为正则表达式将被执行“客户端” - 即,它将获取整个事物,然后尝试将结果缩小到内存中。你可以通过

来优化zerkms的方法
from p in Objects
where p.Title.Contains("Britney") && p.Title.Contains("Spears") && regex.Match(p.Title).Success
select p

我还没有对它进行测试,但它应该在SQL服务器端运行前两个条件,然后使用正则表达式缩小范围。