Сложные выражения в предложении LINQ Where - PullRequest
1 голос
/ 25 августа 2009

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

В настоящее время я использую Linq to 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")); 
}

Ответы [ 3 ]

7 голосов
/ 25 августа 2009

Вам нужно ключевое слово let в 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;
3 голосов
/ 25 августа 2009

Здесь можно использовать предложение let;

from record in xml.Root.XPathSelectElements("record")
let element = record.XPathSelectElement("element[@type='sometype']")
where element != null && element.Value.Contains("keyword")
select record;
1 голос
/ 25 августа 2009

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

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