2010-04-01 4 views
3

Cela fonctionne:Pourquoi ne pas EnumerableRowCollection <DataRow> .Select() compiler comme ça?

from x in table.AsEnumerable() 
where x.Field<string>("something") == "value" 
select x.Field<decimal>("decimalfield"); 

mais cela ne:

from x in table.AsEnumerable() 
.Where(y=>y.Field<string>("something") == "value") 
.Select(y=>y.Field<decimal>("decimalfield")); 

J'ai essayé aussi: méthode

from x in table.AsEnumerable() 
.Where(y=>y.Field<string>("something") == "value") 
.Select(y=>new { name = y.Field<decimal>("decimalfield") }); 

En regardant les deux surcharges de la .Choisir(), je Je pensais que les deux derniers devraient tous les deux renvoyer EnumerableRowCollection, mais apparemment je me trompe. Qu'est-ce que je rate?

Répondre

3

Le problème est que vous combinez deux façons d'exécuter une requête LINQ (syntaxe de requête et d'appeler les méthodes d'extension LINQ directement). La ligne from x in table.AsEnumerable() n'est pas une requête valide car elle nécessite au moins un select .... Cela devrait fonctionner:

table.AsEnumerable() 
.Where(y=>y.Field<string>("something") == "value") 
.Select(y=>new { name = y.Field<decimal>("decimalfield") }); 
+0

Juste pour ajouter à cela ... vous filtrez la table pour 'x', mais ne rien sélectionner pour cela ... vous pouvez garder la même syntaxe et ajouter 'select x' à la fin. – Edyn

0

Peut-être que le problème est ailleurs. Cette compile très bien:

using System.Data; 

class Program 
{ 
    static void Main(string[] args) 
    { 
     var dt = new DataTable(); 

     var res = from x in dt.AsEnumerable() 
        where x.Field<string>("something") == "value" 
        select x.Field<decimal>("decimalfield"); 

     var res2 = dt.AsEnumerable() 
      .Where(y => y.Field<string>("something") == "value") 
      .Select(y => y.Field<decimal>("decimalfield")); 
    } 
} 
+0

votre res2 n'est pas identique au mien. La réponse de Lee est la solution. J'ai incorrectement utilisé un "de x" en utilisant la syntaxe de la méthode dans les deux derniers exemples. ce que, par coïncidence, vous n'avez pas :) –

Questions connexes