简单地说......在普通的SQL中我会这样做:
SELECT * FROM [Products] WHERE [Description] LIKE '%[0-9]%'
在Linq to Entities中我这样做:
Products.Where(p => p.Description.Contains("[0-9]"))
但我最终得到了这个:
-- Region Parameters
DECLARE @p0 NVarChar(8) SET @p0 = '%~[0-9]%'
-- EndRegion
SELECT ...
FROM [Products] AS [t0]
WHERE [t0].[Description] LIKE @p0 ESCAPE '~'
这逃脱了我对SQL正则表达式的尝试。
任何想法如何绕过这个?
修改
我应该补充说我正在使用实体框架和它的SQL提供程序(是吗?)我正在尝试在IQueryable上完成工作,即在运行之前不必将所有行都带入.NET正则表达式
答案 0 :(得分:2)
您可以在查询中使用Like:
using System.Data.Linq.SqlClient;
...
var query = from p in Products
where SqlMethods.Like(p.Description, "%[0-9]%")
select p;
但是这只适用于LINQ to SQL而不是LINQ to Entities,但是你显示LINQ转换为SQL语句所以我猜你正在使用LINQ to SQL。如果没有,那么只需在Where。
中使用Regex表达式脱离我的头顶:
RegEx pattern = new RegEx("[0-9]");
...
var query = from p in Products
where patter.IsMatch(p.Description)
select p;
我没有测试过这个,但它应该可行。