2009-10-13 8 views
1

Je suis un débutant dans Linq.Conversion d'expression lambda

Comment puis-je réécrire cette expression lambda en tant que requête compilée linq?

var query5 = CustomerList.Select((cust, index) => new {cust, index}) 
         .Where(c => c.cust.Country == "USA" && c.index > 70) 
         .Select(c => new { c.cust.CustomerID, c.cust.CompanyName, 
              c.index }); 

comme

var query5 = from c in ....... 
      where ..... 
      select c new {....} 
+2

Ce n'est pas une requête "compilée". C'est juste une syntaxe différente. Il n'a pas d'avantage technique. –

+0

Je n'ai pas besoin d'avantage technique. Pardon! – anonymous

+0

Je pense que la syntaxe Linq est plus lisible que la variante lambda. –

Répondre

5

bien est ici le plus proche syntaxe d'expression de requête:

var query5 = from c in CustomerList.Select((cust, index) => new {cust, index}) 
      where c.cust.Country == "USA" && c.index > 70 
      select new { c.cust.CustomerID, c.cust.CompanyName, c.index }; 

Fondamentalement, le bit vous ne peut faire dans la syntaxe d'expression de requête est la « sélection comprenant l'indice "surcharge". Il n'y a simplement aucune syntaxe qui se traduit par cela. (La même chose vaut pour quelques autres opérations - la syntaxe LINQ de VB est plus riche à cet égard, bien que personnellement je sois satisfait de la façon dont C# le fait, il évite d'ajouter trop de mots-clés contextuels.)

(As Mehrdad dit, il ne s'agit pas d'une requête "compilée".) En fait, le code sera compilé exactement à la même IL.)

+0

Battez-moi de 3 secondes! Ça ne fait rien. –

+0

N'avait pas connaissance d'une surcharge comprenant un index. Encore un autre mystère linq résolu :-D –