Regex в выражении Linq?

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

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

Ответ 1

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

Ответ 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)