2013-06-04 75 views
10

我正在寫一個簡短的C#來解析給定的XML文件。但是,標籤值中的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

where is the sql? - 所有我看到的是LINQ到XML –

+0

這就是我的意思 – jerryh91

+0

你是否在尋找確切的字符串,或類似的東西:快*啓動 –

回答

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

不,那只是說「快速{任何事情}啓動」。您可以在正則表達式定義中忽略大小寫 –

2

fast[- ]?start[- ]?up一個正則表達式應該工作

其中一個可選破折號空間可能是分離字部位

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

,如果你發現你需要調整正則表達式嘗試一個正則表達式測試儀像http://regexpal.com/

正如@DaveBish提到你可能會罰款.Contains(...)測試,而不是一個正則表達式,甚至.ToLower().Contains(...)鏈接(你可能還需要一個null檢查以及)