Come posso restituire un tipo anonimo da un metodo?
-
09-06-2019 - |
Domanda
Ho una query Linq che voglio chiamare da più posti:
var myData = from a in db.MyTable
where a.MyValue == "A"
select new {
a.Key,
a.MyValue
};
Come posso creare un metodo, inserirvi questo codice e quindi chiamarlo?
public ??? GetSomeData()
{
// my Linq query
}
Soluzione
IQueryable e IEnumerable funzionano entrambi.Ma vuoi utilizzare una versione specifica del tipo, IQueryable<
T>
o IEnumerable <
T>
.
Quindi ti consigliamo di creare un tipo per conservare i dati.
var myData = from a in db.MyTable
where a.MyValue == "A"
select new MyType
{
Key = a.Key,
Value = a.MyValue
};
Altri suggerimenti
Un metodo generico dovrebbe darti intellisense:
public class MyType {Key{get;set;} Value{get;set}}
public IQueryable<T> GetSomeData<T>() 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
, dichiara utilizzando IEnumerable<>
e restituire quella variabile.L'iterazione esegue effettivamente la query.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow