2011-06-28 52 views
1

在我的數據庫中,我有表包含文件名模式的表。C#SQL到LINQ模式匹配

格局數據庫:

PKO??_??_??????_*.TXT

文件名:

PKO10_11_123456_example.TXT 

現在,當一些文件導入到我的計劃,我需要匹配它在數據庫中的這些模式。我知道Directory.GetFiles()有這個選項來添加模式,它會返回所有與這個模式匹配的文件。有沒有辦法在LINQ查詢中做到這一點?我試圖Containes()這樣的:

var _cardType = (from type in context.OCA_CARD_TYPEs 
    where type.FILENAME.ToLower().Contains(fileName.ToLower()) 
    select type).Single(); 

但喜歡,我沒有得到任何比賽。

回答

2
where System.Data.Linq.SqlClient.SqlMethods.Like(
     type.FILENAME.ToUpper(), filename, '\\') 

filename@"PKO__\___\_______\_%.TXT"

並注意\_文字_(通過我們指定的\字符轉義) - 在_%LIKE通配符阿金分別爲?*

+0

在我的案例中,'filename'是文件的全名,模式存儲在數據庫中。 – hs2d

+0

@ hs2d「模式存儲在數據庫」所以?只需加載它們,將它們轉換爲SQL所需的('_'和'%',考慮到轉義字符),並使用它...大約3次調用'string.Replace'應該做到這一點...... –

0

我不認爲?是Transact-SQL中的佔位符。要匹配一個字符使用_。那麼你也需要逃避你的下劃線。我不知道L2S或L2E的行爲如何。

More