2012-04-26 30 views
18

Necesito convertir el resultado de la consulta de linq a la lista. He probado el siguiente código: Se ha producidoCómo convertir el resultado de la consulta LINQ en una lista?

var qry = from a in obj.tbCourses 
        select a; 

List<course> lst = new List<course>(); 
lst = qry.ToList(); 

el siguiente error para el código anterior:

Cannot implicitly convert type 
System.Collections.Generic.List<Datalogiclayer.tbcourse> to 
System.Collections.Generic.List<course> 
+0

¿Cómo no fue de ayuda? ¿Qué esperabas que eso no sucediera? – BrokenGlass

+0

BTW, su código podría ser mucho más corto ... 'var lst = obj.tbCourses.ToList();' –

+0

posible duplicado de [Sintaxis para la consulta de linq en la Lista ] (http://stackoverflow.com/questions/7488980/syntax-for-linq-query-to-liststring) – nawfal

Respuesta

15

No hay necesidad de hacer tanto las obras ..

var query = from c in obj.tbCourses 
     where ... 
     select c; 

continuación, puede utilizar:

List<course> list_course= query.ToList<course>(); 

Funciona bien para mí.

5

Es necesario utilizar la palabra clave select new LINQ para convertir de forma explícita su entidad tbcourse en el tipo personalizado course. Ejemplo de select new:

var q = from o in db.Orders 
     where o.Products.ProductName.StartsWith("Asset") && 
       o.PaymentApproved == true 
     select new { name = o.Contacts.FirstName + " " + 
           o.Contacts.LastName, 
        product = o.Products.ProductName, 
        version = o.Products.Version + 
           (o.Products.SubVersion * 0.1) 
        }; 

http://www.hookedonlinq.com/LINQtoSQL5MinuteOverview.ashx

8

es necesario convertir de alguna manera cada tbcourse objeto a una instancia de course. Por ejemplo, course podría tener un constructor que toma un tbcourse. A continuación, puede escribir la consulta como la siguiente:

var qry = from c in obj.tbCourses 
      select new course(c); 

List<course> lst = qry.ToList(); 
+0

¡Esto es creativo! Sin embargo, tiene un inconveniente de que su proyecto de modelos ahora tendrá una dependencia de su depósito de datos. Si bien esto estaría bien en un proyecto más pequeño, dependiendo de su arquitectura y la separación de las preocupaciones, esto podría ser un problema. – msigman

1

Lo que puede hacer es seleccionar todo en una nueva instancia de Curso y luego convertirlos en una Lista.

var qry = from a in obj.tbCourses 
        select new Course() { 
         Course.Property = a.Property 
         ... 
        }; 

qry.toList<Course>(); 
16
List<course> = (from c in obj.tbCourses 
       select 
       new course(c)).toList(); 

puede convertir el objeto de entidad a una lista directamente en la llamada. Hay métodos para convertirlo a una estructura de datos diferente (lista, matriz, diccionario, búsqueda o cadena)

+0

en mi humilde opinión esta es la mejor respuesta. No es solo un comando, sino que también ilustra que 'desde ... seleccione ... 'la sintaxis de linq sigue manteniendo su significado equivalente a la forma estándar (' tbCourses.Select() ') – miroxlav

Cuestiones relacionadas