12

Sto utilizzando l'approccio CodeFirst e ho riscontrato un problema in cui è necessario convertire DbSet in ObjectQuery. Questo è quello che ho fatto per la conversione.Come convertire DbSet in Entity framework in ObjectQuery

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

dove db è il contesto che eredita da DbContext e Request è class.

Così, quando provo a chiamare il metodo che si aspetta ObjectQuery come ObjectQueryMethod (objectSet), genera il seguente errore.

"Tipo di un'espressione condizionale non può essere determinato, perché non v'è alcuna conversione implicita tra 'System.Data.Entity.DbSet <>' e 'System.Data.Objects.ObjectQuery <>'"

ogni aiuto è molto apprezzato!

+0

Perché dovresti convertire un DbSet in ObjectQuery? – Kittoes0124

+0

Fornisci maggiori dettagli - che cos'è 'ObjectQueryMethod'? Il tuo approccio attuale è corretto. Non è possibile convertire 'DbSet' in' ObjectQuery'. Devi creare 'ObjectSet' e usarlo al posto di' DbSet'. –

+0

@Kittoes: Sto cercando di implementare la ricerca avanzata in JQGrid e ObjectQuery sembra essere quello giusto per analizzare i parametri (filtri) inviati al server. – inspiringmyself

risposta

23

Ho trovato la risposta. Naturalmente, è possibile convertire DbSet in Entity Framework in ObjectQuery utilizzando le linee di codice sottostanti.

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

dove,

  • db - Contesto classe inherting da DbContext.
  • Requests - DbSet<Request> definito nella classe Context.
  • objectSet - Ora può essere passato come ObjectQuery.
+5

AFAIK puoi lasciare la stringa come parametro, il che rende meno error-pron: 'objectContext.CreateObjectSet ();' –

2

Grazie per la risposta corretta 'inspiringmyself'; questo è solo per elaborare la tua risposta. Sono riuscito a fare questo con un tipo generico, così giusto per condividerla:

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)); 
} 

E ho pensato che il post di cui sopra potrebbe fare con un esempio di quali criteri di inviare ecco un esempio:

//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'"); 
Problemi correlati