2013-06-04 4 views
10

私は、特定のXMLファイルを解析する短いC#を書いています。しかし、タグ値の1つは変更できますが、where句には常に「ファーストスタートアップ」という単語が含まれています(大文字と小文字を無視しますが、同じ順序にする必要があります)。私はどのようにC#でSQLのようなステートメントでこれを行うだろうか分からない。Linqステートメントの正規表現?

var selected = from cli in doc.Descendants(xmlns+ "Result") 
    where cli.Element(xmlns + "ResultsLocation").Value == "Assessments-Fast-Startup" 
         select cli; 
+0

ここで、sql?私が見ているのはlinqからxmlへ –

+0

だからこそ、 – jerryh91

+0

は正確な文字列を探しているということです:fast * startup –

答えて

13

正確な文字列を探しているとします。ちょうどString.Containsを使用できますか?それ以外の場合は

var selected = from cli in doc.Descendants(xmlns+ "Result") 
    where cli.Element(xmlns + "ResultsLocation").Value.Contains("Assessments-Fast-Startup") 
    select cli; 

、何かのように:

var rx = new Regex("fast(.*?)startup", RegexOptions.IgnoreCase); 

var selected = from cli in doc.Descendants(xmlns+ "Result") 
    where rx.IsMatch(cli.Element(xmlns + "ResultsLocation").Value) 
    select cli; 
+0

(。*?)は無視されますか? – jerryh91

+1

Nah、それはちょうど「速い{何でも}スタートアップ」と言っているだけです。あなたは正規表現定義で大文字小文字を無視することができます –

2

fast[- ]?start[- ]?upの正規表現は動作するはずのオプションダッシュスペースワード部品

を分離することができ

... 
where Regex.IsMatch(
    cli.Element(xmlns + "ResultsLocation").Value, 
    "fast[- ]?start[- ]?up", 
    RegexOptions.IgnoreCase 
) 
select cli 

あなたは@DaveBishがあなたの代わりに正規表現の.Contains(...)テストあるいは.ToLower().Contains(...)チェーンと細かいかもしれません述べたように、正規表現がhttp://regexpal.com/

のような正規表現テスターを試し微調整する必要が発見した場合(あなたもnullチェックが必要な場合があります同様に)