2010-07-07 7 views
7

Tengo la siguiente consulta LINQ:error LINQ - "NotSupportedException: sobrecarga no compatible utilizado para operador de consulta 'Seleccionar'"

var tmp = 
    from container in Container 
    join containerType in ContainerType on container.ContainerType equals containerType 
    where containerType.ContainerTypeID == 2 
    select new { ContainerID = container.ContainerID, TypeID = container.ContainerTypeID}; 

var results = tmp.Select((row, index) => new { row.ContainerID, row.TypeID, ContainerIndex = index }) 

Como es, esto funciona bien. Si añado lo siguiente, para que pueda ver los resultados en LINQPad, me sale el error descrito en el título de este mensaje:

results.Dump(); 

Este error no es un error LINQPad, que viene de LINQ, y don No entiendo lo que significa.

Gracias.

+0

Véase también mi comentario a la respuesta de Jon a su pregunta anterior. –

Respuesta

15

De acuerdo, no me había dado cuenta Container era una fuente de datos LINQ to SQL para empezar. Básicamente no está logrando convertir la segunda proyección en SQL.

lo tanto, usted quiere hacer sólo un poco en .NET lugar - se puede forzar que se use Enumerable.Select con AsEnumerable:

var results = tmp.AsEnumerable() 
       .Select((row, index) => new { row.ContainerID, row.TypeID, 
               ContainerIndex = index }); 
+0

Lo siento, debería haber mencionado eso. Gracias por tu ayuda. –

+0

He encontrado el mismo problema, y ​​el uso de '.AsEnumerable()' también funciona. +1. Pero, ¿por qué funciona? ¿Por qué desde un 'System.Data.Linq.Table ' no puedo iterar/seleccionar nuevo objeto? – markzzz

+0

@markzzz: Es una cuestión de dónde ocurre la proyección. Si bien es consultable, estás pidiendo que lo que estés haciendo se convierta en SQL ... mientras que después de haber usado 'AsEnumerable', significa que todo se hace localmente. –