LINQ Where子句中的复杂表达式

时间:2009-08-25 17:41:36

标签: linq linq-to-xml where-clause

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

我目前正在使用带有XPath扩展的Linq到XML,并且在我无法保证的元素上使用了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 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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;

答案 2 :(得分:1)

我不确定查询语法是否足够肯定,但这对于函数语法来说是微不足道的:

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