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
}
È stato utile?

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

IQueryable

Quindi la tua dichiarazione del metodo sarebbe simile

public IQueryable GetSomeData()

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
scroll top