Come posso restituire un tipo anonimo da un metodo?

Ho una query di Linq che desidero chiamare da più punti:

var myData = from a in db.MyTable where a.MyValue == "A" select new { a.Key, a.MyValue }; 

Come posso creare un metodo, inserire questo codice e quindi chiamarlo?

 public ??? GetSomeData() { // my Linq query } 

IQueryable e IEnumerable funzionano entrambi. Ma si desidera utilizzare una versione specifica del tipo, IQueryable < T > o IEnumerable < T > .

Quindi ti consigliamo di creare un tipo per mantenere i dati.

 var myData = from a in db.MyTable where a.MyValue == "A" select new MyType { Key = a.Key, Value = a.MyValue }; 

IQueryable

Quindi la dichiarazione del tuo metodo sarà simile

 public IQueryable GetSomeData() 

Un metodo generico dovrebbe darti intellisense:

 public class MyType {Key{get;set;} Value{get;set}} public IQueryable GetSomeData() where T : MyType, new() { return from a in db.MyTable where a.MyValue == "A" select new T {Key=a.Key,Value=a.MyValue}; } 

Se vuoi tornare, hai bisogno di un tipo.

Invece di var , dichiarare usando IEnumerable<> e restituire quella variabile. L’iterazione attraverso di esso esegue effettivamente la query.