12

Estoy usando el enfoque CodeFirst y me encontré con un problema donde necesito convertir DbSet a ObjectQuery. Esto es lo que hice para la conversión.Cómo convertir DbSet en Entity Framework a ObjectQuery

ObjectContext objectContext = ((IObjectContextAdapter)db).ObjectContext; 
ObjectSet<Request> objectSet = objectContext.CreateObjectSet<Request>(); 

donde db es el contexto que hereda de DbContext y Request es class.

Por lo tanto, cuando intento llamar al método que espera ObjectQuery como ObjectQueryMethod (objectSet), arroja el siguiente error.

"Tipo de expresión condicional no se puede determinar porque no hay una conversión implícita entre 'System.Data.Entity.DbSet <>' y 'System.Data.Objects.ObjectQuery <>'"

Cualquier ayuda es ¡apreciado enormemente!

+0

¿Por qué necesitarías convertir un DbSet a ObjectQuery? – Kittoes0124

+0

Proporcione más detalles: ¿qué es 'ObjectQueryMethod'? Tu enfoque actual es correcto. No puede convertir 'DbSet' a' ObjectQuery'. Debe crear 'ObjectSet' y usarlo en lugar de' DbSet'. –

+0

@Kittoes: Estoy tratando de implementar Búsqueda avanzada en JQGrid y ObjectQuery parece ser el correcto para analizar los parámetros (filtros) enviados de vuelta al servidor. – inspiringmyself

Respuesta

23

Encontré la respuesta. Por supuesto, es posible convertir DbSet en Entity framework a ObjectQuery usando las siguientes líneas de código.

ObjectContext objectContext = ((IObjectContextAdapter)db).ObjectContext; 
ObjectSet<Request> objectSet = objectContext.CreateObjectSet<Request>("Requests"); 

donde,

  • db - Contexto clase inherting de DbContext.
  • Requests - DbSet<Request> se define en Clase de contexto.
  • objectSet - Ahora se puede pasar como ObjectQuery.
+5

AFAIK puede dejar la cadena como parámetro, lo que lo hace menos error-pron: 'objectContext.CreateObjectSet ();' –

2

Gracias por la respuesta correcta 'inspiringmyself'; esto es solo para elaborar en su respuesta. Me las arreglé para hacer esto con un tipo genérico, por lo que sólo compartirlo:

private List<T> GetByCustomCriteria<T>(string criteria) where T: class 
{ 
    var objectContext = ((IObjectContextAdapter)_myModelEntities).ObjectContext; 
    //note: _myModelEntities is a DbContext in EF6. 
    var objectSet = objectContext.CreateObjectSet<T>(); 
    return new List<T>(objectSet.Where(criteria)); 
} 

Y pensé que el post anterior podría hacer con un ejemplo de lo criterios para enviar así que aquí está un ejemplo:

//sample criteria for int field: 
var myClientById = GetByCustomCriteria<Client>("it.Id == 1");` 

//sample criteria for string field, note the single quotes 
var myClientByName = GetByCustomCriteria<Client>("it.Surname == 'Simpson'"); 
Cuestiones relacionadas