Как я могу предотвратить выход Entity Framework из моего Regex? - PullRequest
1 голос
/ 18 декабря 2009

Проще говоря ... простым 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.

Есть идеи, как это обойти?

Редактировать

Я должен добавить, что я использую Entity Framework с его провайдером SQL (это правильно?), И я пытаюсь выполнить работу над IQueryable, т.е. не нужно перенести все строки в .NET, прежде чем я смогу запустить регулярное выражение

1 Ответ

2 голосов
/ 18 декабря 2009

Вы можете использовать лайк в запросе:

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. Если нет, то просто используйте выражение Regex в Where.


С макушки головы:

RegEx pattern = new RegEx("[0-9]");
...
var query = from p in Products
            where patter.IsMatch(p.Description)
            select p;

Я не проверял это, но оно должно работать.

...