Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

440
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!