Регулярное выражение в заявлении Linq?

Я пишу короткий C# для анализа данного XML-файла. Но 1 из значений тега может изменяться, но всегда включает слова "быстрый запуск" (без учета регистра и пробелов, но должен быть в том же порядке) в предложении where. Я не уверен, как я бы сделал это в SQL-операторе like в C#.

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

2 ответов


предполагая, что вы ищете точную строку-можете ли вы просто использовать 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;

регулярное выражение для fast[- ]?start[- ]?up должно работать

где необязательный тире или пробел может быть разделение частей слов

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

если вам нужно изменить регулярное выражение попробовать регулярное выражение тестер как http://regexpal.com/

как @DaveBish упомянул, вы можете быть в порядке с