2009-12-18 16 views
1

簡而言之...在普通的SQL我這樣做:如何防止實體框架轉義我的正則表達式?

SELECT * FROM [Products] WHERE [Description] LIKE '%[0-9]%' 

在LINQ到實體我這樣做:

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之前,我可以運行正則表達式

回答

2

您可以使用諸如查詢:

using System.Data.Linq.SqlClient; 
... 
var query = from p in Products 
      where SqlMethods.Like(p.Description, "%[0-9]%") 
      select p; 

但隨着LINQ這僅適用於SQL不過你是顯示了LINQ的轉換不是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; 

我沒有測試過這一點,但它應該工作。

+0

Linq to Entities有等價物嗎? – joshcomley