Ho fatto qualcosa di simile un po 'indietro usando il riflesso.
T item = context.Set(T).First();
string propName = "MyProperty";
object value = item.GetType().GetProperty(propName).GetValue(item, null);
Naturalmente nota che si sia bisogno di gettare i valori per un tipo specifico manualmente, o utilizzare ToString
, che dovrebbe funzionare abbastanza bene su tutti i tipi di base.
Si presume che si disponga già dei dati dal server e che ora sia necessario elaborarli.
EDIT:
Se si desidera creare una query, poi ho trovato this!
Apparentemente, quello che stai cercando è disponibile negli esempi forniti con Visual Studio (o puoi scaricarli separatamente).
È disponibile un metodo di estensione che consente di utilizzare .Select("propertyName")
che restituisce IQueriable
. Ricorda di aggiungere using System.Linq.Dynamic;
(e, naturalmente, aggiungi il file .cs richiesto al tuo progetto).
È quindi possibile creare query selezionate specificando il nome del parametro.
List<object> data = (db.Set<SetType>()
.Where("propertyName == @0 && someOtherProperty == @1", propertyValue, someOtherPropertyValue)
.Select("propertyName") as IEnumerable<object>).ToList();
Qual è il contesto generica qui? Puoi mostrare la firma del metodo in cui vuoi che la tua query abbia origine (per vedere quale tipo di parametro di tipo generico abbiamo) e magari un'istruzione a riga singola che usa quel metodo e il risultato atteso? –
Il concetto è che ho una tabella chiamata "libri" e uno dei campi è "autore" e voglio eseguire una ricerca sulla colonna "autore". Ho anche molte altre tabelle su cui voglio eseguire la ricerca identica, quindi creare un metodo generico dove dico darmi degli oggetti corrispondenti, ad es. 'IEnumerable' facendo corrispondere la colonna '" Autore "' o qualunque colonna specifichi. –
NibblyPig