2009-08-25 8 views
1

Je me demandais s'il était possible d'inclure des variables internes ou des délégués dans des instructions linq? J'utilise actuellement Linq to XML avec les extensions XPath et j'utilise une clause where sur un élément dont je ne peux pas garantir l'existence.Expressions complexes dans une clause LINQ Where

Voici un échantillon de ce que je veux dire:

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

Je veux que le où quelque chose comme:

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

Répondre

7

Vous voulez que le mot-clé "let" dans LINQ. Quelque chose comme ça?

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

Je ne connais pas la syntaxe de requête assez bien pour dire à coup sûr, mais ce serait trivial avec la syntaxe fonctionnelle:

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

Vous pouvez utiliser une clause « nous » ici;

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