1

我想知道是否可以在 linq 语句中包含内部变量或委托?

我目前正在使用带有 XPath 扩展的 Linq to XML,并且在我无法保证会存在的元素上使用 where 子句。

这是我的意思的示例:

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

我希望 where 是这样的:

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

3 回答 3

7

您需要 Linq 中的“let”关键字。像这样的东西?

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;
于 2009-08-25T17:43:43.403 回答
3

您可以在这里使用“let”子句;

from record in xml.Root.XPathSelectElements("record")
let element = record.XPathSelectElement("element[@type='sometype']")
where element != null && element.Value.Contains("keyword")
select record;
于 2009-08-25T17:45:27.050 回答
1

我不太清楚查询语法可以肯定地说,但这对于功能语法来说是微不足道的:

var result = xml.Root.XPathSelectElements("record").Where(record => {
   var element = record.XPathSelectElement("element[@type='sometype']");
   return (element != null && element.Value.Contains("keyword"));
});
于 2009-08-25T17:43:55.227 回答