我需要用通配符匹配某些字符串,就像使用 SQL LIKE 一样。虽然关于这个主题有类似的问题,但我使用的是 Unity3D,虽然它的 Mono.NET 库有 LINQ,但它没有 SqlMethods。
我需要一种模拟所有通配符的方法。所以'*MSB'
应该能够匹配 EastMSB、WestMSB,并且DB0?-??
应该匹配 'DB01-11'、'DB01-07' 等。
我需要用通配符匹配某些字符串,就像使用 SQL LIKE 一样。虽然关于这个主题有类似的问题,但我使用的是 Unity3D,虽然它的 Mono.NET 库有 LINQ,但它没有 SqlMethods。
我需要一种模拟所有通配符的方法。所以'*MSB'
应该能够匹配 EastMSB、WestMSB,并且DB0?-??
应该匹配 'DB01-11'、'DB01-07' 等。
Linq 能够将System.String
类的方法扩展Contains
为适当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得到的。
你可以做这样的事情。语法可能不完全正确,它不在我的脑海中,但它会让你接近。
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() 构造函数中传递的表达式可以是满足您的搜索所需的任何内容。