2015-09-24 7 views
5

Sto tentando di creare una funzione generica per ottenere dati da DB utilizzando Entity Framework. Sto passando un id come chiave per il recupero. Per fare questo ho scritto la seguente funzioneFunzione generica per ottenere i dati utilizzando il framework di entità

public T Get<T>(object id) where T : class 
{ 
    T item = null; 

    using (var context = MyContext()) 
    { 
     item = context.Set<T>().Find(id); 
    } 

    return item; 
} 

La funzione funziona senza alcun problema. Ma come posso modificare questa funzione per ottenere i dati se non sto passando la chiave primaria come filtro?

risposta

10

È possibile passare un'espressione di predicato e utilizzare .FirstOrDefault().

public T Get<T>(Expression<Func<T, bool>> predicate) 
    where T : class 
{ 
    T item = null; 
    using (var context = MyContext()) 
    { 
     item = context.Set<T>().FirstOrDefault(predicate); 
    } 
    return item; 
} 

var customer = context.Get<Customer>(x => x.Name == "Bob"); 
+0

Grazie .. questo è quello che sto cercando – Optimus

Problemi correlati