2012-03-26 16 views
23

Ho un metodo per ottenere valori dal database.Parametri nominati con parametri

public virtual List<TEntity> GetValues(
      int? parameter1 = null, 
      int? parameter2 = null, 
      int? parameter3 = null, 
      params Expression<Func<TEntity, object>>[] include) 
     { 
      //... 
     } 

Come posso chiamare questa funzione con il parametro di nome di non scrivere tutti i parametri prima include? voglio fare qualcosa di simile

var userInfo1 = Unit.UserSrvc.GetValues(include: p => p.Membership, p => p.User); 

Ma questo non sembra funzionare? Come posso usare il parametro named con params?

+2

pensa che questa domanda su un thread MSDN - sembra che avrebbe dovuto nominare tutti argomento nella lista params o qualcosa del genere? http://bit.ly/GPZvkH –

+0

Grazie James. A proposito, la risposta non è ancora stata trovata ... Penso che non sia ancora implementata in .NET. –

+0

@ChuckNorris, questo non ha nulla a che fare con .Net, solo con C#. Altri linguaggi .Net possono gestire 'params' e denominare i parametri in modo diverso, quindi ciò che si desidera potrebbe essere già possibile in qualche altra lingua. Inoltre, penso che non ci sia "ancora": è improbabile che cambi nelle versioni future di C#. – svick

risposta

12

I pensa che l'unico modo è qualcosa di simile:

GetValues(include: 
    new Expression<Func<TEntity, object>>[] { p => p.Membership, p => p.User }) 

Che non è eccezionale. Sarebbe probabilmente meglio se si aggiunge un sovraccarico per questo:

public List<Entity> GetValues(params Expression<Func<Entity, object>>[] include) 
{ 
    return GetValues(null, null, null, include); 
} 

Poi si chiama il metodo proprio come

GetValues(p => p.Membership, p => p.User) 
+0

Accetto con @svick - probabilmente dovresti aggiungere un paio di sovraccarichi per i tuoi tipici scenari di utilizzo. – VinayC

8

Un argomento params funziona come un array, provare la seguente sintassi:

var userInfo1 = Unit.UserSrvc.GetValues(include: new Expression<Func<TEntity, object>>[] { p => p.Membership, p => p.User }); 

(Potrebbe essere necessario un po 'di adattamento a causa del parametro generico, ma penso che si ottiene l'essenza di esso)

+5

Se lo fai in questo modo, non ha senso avere la parola chiave 'params' specificata. Questo non è diverso dal fatto di avere un semplice array come ultimo argomento. L'OP sta chiedendo come farlo con 'params'. –

+1

Grazie per la risposta, ma non è quello che voglio esattamente ... Rob Levine ha ragione, ma non sembra il modo di farlo con i param. –

+0

Oh, capisco, ho frainteso ciò di cui avevi bisogno. Scrivere sovraccarichi è l'unica alternativa che vedo, ma ancora una volta, non è quello che vuoi ... – madd0