Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

443
Vistas
Cómo convertir DbSet<T> a List<T>

Dado el siguiente contexto simplificado de Entity Framework 6, estoy tratando de completar una Lista con las entidades pero tengo problemas con la forma de emitir (creo) a través de la reflexión.

 public class FooContext : DbContext { public virtual IDbSet<FooClass> Foo { get; set; } //... } public class FooClass { public int Id{ get; set; } public string Name {get; set; } //... } public main() { using (var context = new FooContext()) { var sets = typeof(FooContext).GetProperties().Where(pi => pi.PropertyType.IsInterface && pi.PropertyType.GetGenericTypeDefinition().ToString().ToLower().Contains("idbset")); foreach (var set in sets) { //When I debug and enumerate over 'value' the entire results are shown so I believe the reflection part is OK. var value = set.GetValue(context, null); //Always returns null. How can I cast DbSet<T> to List<object> or List<T>? var list = value as List<object>(); //... } } }

Estoy haciendo esto como método de utilidad para algunas pruebas de integración que estoy haciendo. Estoy tratando de hacer esto sin usar llamadas SQL en línea directas (usando SqlConnection y SqlCommand, etc.) para acceder a la base de datos (ya que el almacén de datos puede cambiar a Oracle, etc.).

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

IDBSet hereda de IQueryable<TEntity> , IQueryable<TEntity> , IEnumerable<TEntity> IQueryable , IEnumerable lo que no puede convertirlo directamente en una lista de esa manera. Sin embargo, podría obtener una List<TEntity> de todas las entidades en el DBSet usando .ToList() o .ToListAsync()

Sin embargo, esto crea una copia de todas las entidades en la memoria, por lo que debería considerar operar con LINQ directamente en el DBSet.

over 4 years ago · Santiago Trujillo Denunciar

0

//dont forget using System.Linq; using (var context = new FooContext()) { IQueryable<FooClass> rtn = from temp in context.Foo select temp; var list = rtn.ToList(); }
over 4 years ago · Santiago Trujillo Denunciar

0

Junto con la respuesta de VicYam, aquí hay una forma más fácil con una explicación detallada.

Una vez que agregue el espacio de nombres System.Linq , ya no necesitará obtener IQueryable y luego convertirlo a List . En su lugar, obtendrá los métodos de extensión en el objeto DbSet .

¿Qué significa esto? Simplemente puede devolver el DbSet por sí mismo, ya que hereda de IEnumerable . El consumidor, posiblemente un desarrollador, puede hacer un .ToList o cualquier otro tipo de lista que pueda necesitar.

más fácil

Esto devolverá el DbSet tal como está, que ya hereda de IEnumerable que es un tipo de lista que luego se puede convertir en List .

 List<ObjectType> list = new List<ObjectType>(); using (var context = new FooContext()) { list = context.Foo; }

Alternativa

Puede convertir inmediatamente de IEnumerable a List .

 using (var context = new FooContext()) { var list = context.Foo.ToList(); }

¿Todavía quiere la respuesta de VicYam pero como una sola línea?

 using (var context = new FooContext()) { var list = context.Foo.AsQueryable().ToList(); }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda