在不使用SqlMethods的情况下将LINQ与通配符一起使用

时间:2012-10-09 11:30:03

标签: linq

我需要将某些字符串与通配符匹配,非常类似于SQL LIKE。虽然在这个主题上有类似的问题,我使用的是Unity3D,虽然它的Mono.NET库有LINQ,但它没有SqlMethods。

我需要一种模拟所有外卡字符的方法。因此'*MSB'应该能够匹配EastMSB,WestMSB,DB0?-??应匹配'DB01-11','DB01-07'等。

2 个答案:

答案 0 :(得分:3)

Linq能够将System.StringContains类的方法扩展到相应的SQL查询中,以便查询:

var data = dataContext.Clients.Where(c => c.Name.Contains("John"));

会被“翻译”成类似的东西:

DECLARE @p0 VarChar(1000) = '%John%'
SELECT [t0].[Id], [t0].[Name]
FROM [Clients] as [t0]
WHERE [t0].[Name] LIKE @p0

至少,这是我使用LinqPad获得的。

答案 1 :(得分:-1)

你可以这样做。

指出,语法可能不完全正确,它不在我的脑海中,但它会让你感到非常接近。

List<string> list = new List<string>();
list.Add("#1");
list.Add("#2");
list.Add("#3");

RegularExpressions.Regex regEx = new System.Text.RegularExpressions.Regex("#1");

var qry = list.Where<string>(item => regEx.IsMatch(item)).ToList<string>();

当然,您在Regex()构造函数中传递的表达式可以是满足您搜索所需的任何内容。