Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

441
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda