2009-08-25 3 views
1

Мне было интересно, можно ли включить внутренние переменные или делегаты в выражения linq?Сложные выражения в LINQ Where Section

В настоящее время я использую Linq для XML с расширениями XPath и использую предложение where для элемента, который я не могу гарантировать, будет существовать.

Вот пример того, что я имею в виду:

var result = 
    from record in xml.Root.XPathSelectElements("record") 
    where ... 
    select record; 

Я хочу, чтобы где-то вроде:

where 
{ 
    var element = record.XPathSelectElement("element[@type='sometype']"); 
    return (element != null && element.Value.Contains("keyword")); 
} 

ответ

7

Вы хотите «пусть» ключевое слово в Linq. Что-то вроде этого?

var result = 
    from record in xml.Root.XPathSelectElements("record") 
    let element = record.XPathSelectElement("element[@type='sometype']") 
    where (element != null && element.Value.Contains("keyword")) 
    select record; 
1

Я не знаю синтаксис запросов достаточно хорошо, чтобы сказать наверняка, но это было бы тривиально с функциональным синтаксисом:

var result = xml.Root.XPathSelectElements("record").Where(record => { 
    var element = record.XPathSelectElement("element[@type='sometype']"); 
    return (element != null && element.Value.Contains("keyword")); 
}); 
3

Вы можете использовать «пусть» пункт здесь;

from record in xml.Root.XPathSelectElements("record") 
let element = record.XPathSelectElement("element[@type='sometype']") 
where element != null && element.Value.Contains("keyword") 
select record; 

 Смежные вопросы

  • Нет связанных вопросов^_^