2013-06-04 46 views
10

Tôi đang viết một C# ngắn để phân tích một tệp XML đã cho. Nhưng 1 trong các giá trị thẻ có thể thay đổi, nhưng luôn bao gồm các từ "Khởi động nhanh" (bỏ qua trường hợp và dấu cách, nhưng cần phải theo cùng một thứ tự) trong mệnh đề where. Tôi không chắc làm thế nào tôi sẽ làm điều này trong một tuyên bố như sql trong C#.Regex trong câu lệnh Linq?

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

sql ở đâu? - tất cả những gì tôi thấy là LINQ to xml –

+0

Đó là ý tôi là – jerryh91

+0

bạn đang tìm kiếm chuỗi chính xác, hay cái gì đó như: khởi động nhanh * –

Trả lời

13

Giả sử bạn đang tìm chuỗi chính xác - bạn có thể chỉ sử dụng String.Contains không?

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

Nếu không, một cái gì đó như:

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

là (. *?) bỏ qua trường hợp? – jerryh91

+1

Không, đó chỉ là nói "fast {anything} startup". Bạn có thể bỏ qua trường hợp trong định nghĩa regex –

2

một regex của fast[- ]?start[- ]?up nên làm việc

nơi một tùy chọn dash hoặc gian có thể tách các phần từ

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

nếu bạn thấy bạn cần phải tinh chỉnh regex thử một thử regex như http://regexpal.com/

Như @DaveBish đã nêu bạn có thể sử dụng tốt với .Contains(...) thử nghiệm thay vì một regex hoặc thậm chí .ToLower().Contains(...) chaining (bạn cũng có thể cần một tấm séc null là tốt)

Các vấn đề liên quan