2010-04-13 86 views
7

我有一个字符串“Word1 Word2”,我想将它转换为查询,如“Like'%Word1%Word2%'”。Linq2SQL生成Like运算符

目前我有:

from t in Test 
where t.Field.Contains("Word1 Word2") 

如何LINQ2SQL做到这一点?我是否需要为此创建两个单独的查询,我不能将它写在同一个语句中吗?

提前

回答

8
from t in Test 
where SqlMethods.Like(t.Field, "%Word1%Word2%") 
select t 
+0

尽管其他人可能是正确的,但我更喜欢这种解决方案。 – Dante 2010-04-13 11:44:46

+0

这很好,不知道这种方法。如果有人想知道: DECLARE @ p0 VarChar(13)SET @ p0 ='%Word1%Word2%'..... WHERE [t0]。[Name] LIKE @ p0 – 2010-04-13 11:54:24

0

那么THX会转化为

LIKE "%Word1 Word2%" 

这可能不是你想要的...如果你写这样的查询:

where t.Field.Contains("Word1") && t.Field.Contains("Word2") 

它将生成以下SQL:

DECLARE @p0 VarChar(4) SET @p0 = '%ab%' 
DECLARE @p1 VarChar(4) SET @p1 = '%cd%' 
.... 
SELECT ... 
WHERE ([t0].[Field] LIKE @p0) AND ([t0].[Field] LIKE @p1) 
+0

原来的'LIKE'只有当两个单词出现在字段中时才匹配。 – 2010-04-13 11:38:33

+0

啊是的,真的......编辑。 – 2010-04-13 11:41:42

0

作为变通,这也许就足够了:

from t in Test 
where t.Field.Contains("Word1") && t.Field.Contains("Word2") 

...与客户端上的一些过滤后,以确保WORD2来WORD1后。