2011-06-28 12 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(); 

をしかし、私はすべての一致を得るdidntのことが好きです。

答えて

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

@"PKO__\___\_______\_%.TXT"などと \_は(私たちは、指定 \文字を経由してエスケープ) _ リテラルであることに注意してください - _%は似LIKEワイルドカードですそれぞれ?および*になります。

+0

私の場合、 'filename'はファイルのフルネームであり、パターンはデータベースに保存されます。 – hs2d

+0

@ hs2d "とパターンはデータベース" so?それらをロードし、SQLに必要なもの( '_'と'% '、エスケープ文字を考慮して)に翻訳して、それを使用してください...' string.Replace'への3回の呼び出しはそれを行うべきです... –

0

?はTransact-SQLのプレースホルダではないと思います。 1つの文字に一致させるには_を使用します。次に、アンダースコアをエスケープする必要があります。私はL2SやL2Eがどのように動作するのか分かりません。

filename

More