Pregunta

Yo estaba trabajando con un DataTable y notó que Resharper me recomendó que puede convertir un bucle en una expresión LINQ.Así lo hice y fue reescrito en la expresión de consulta de sintaxis (simplificado):

var test1 = from DataRow row in dt.Rows select row;

Personalmente, prefiero la sintaxis de método para reescribió a este:

var test2 = dt.Rows.Select(row => row);

Y se rompió.

'Sistema.De datos.DataRowCollection' no contiene una definición para 'Seleccionar' y no método de extensión 'Seleccionar' aceptar un primer argumento de tipo 'System.De datos.DataRowCollection' podría ser encontrado (¿falta una directiva using o una referencia de ensamblado?)

Desde la expresión de consulta son traducido a las llamadas de método, ¿por qué es que la primera funciona, pero no el segundo?Me lo esperaba de cualquiera de los dos o ninguno para el trabajo que obviamente no es el caso.

¿Fue útil?

Solución

La primera tiene un explícito de la variable de rango, por lo que es realmente compilado:

var test2 = dt.Rows.Cast<DataRow>();

(No hay necesidad para la Select como este es un degenerados expresión de consulta (el select es un no-op.)

Una alternativa es llamar a AsEnumerable de DataTableExtensions.Creo que puede ser de algunos beneficios de rendimiento en eso, pero sólo en algunos casos:

var test2 = dt.AsEnumerable();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top