2013-06-04 19 views
10

Sto scrivendo un breve C# per analizzare un dato file XML. Ma 1 dei valori dei tag può cambiare, ma include sempre le parole "Avvio rapido" (ignorando caso e spazi, ma deve essere nello stesso ordine) nella clausola where. Non sono sicuro di come lo farei in una dichiarazione sql in C#.Regex nella dichiarazione di Linq?

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

dove è il sql? - tutto quello che vedo è linq a xml –

+0

Questo è ciò che intendevo – jerryh91

+0

stai cercando la stringa esatta, o qualcosa di simile: avvio veloce * –

risposta

13

Supponendo che si sta cercando la stringa esatta - si può semplicemente utilizzare un String.Contains?

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

In caso contrario, qualcosa di simile:

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

è (. *?) ignorare il caso? – jerryh91

+1

Nah, questo sta solo dicendo "veloce {qualunque} avvio". È possibile ignorare il caso nella definizione regex –

2

una regex di fast[- ]?start[- ]?up dovrebbe funzionare

dove un optional cruscotto o spazio potrebbe essere che separa le parti parola

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

se si trova è necessario modificare la regex provare un tester regex come http://regexpal.com/

Come @DaveBish ha detto che potrebbe essere bene con .Contains(...) prova invece di un'espressione regolare o anche .ToLower().Contains(...) concatenamento (potrebbe essere necessario anche un controllo null pure)

Problemi correlati