2012-03-26 19 views
23

Ich habe eine Methode zum Abrufen von Werten aus der Datenbank.Benannte Parameter mit Parametern

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

Wie kann ich diese Funktion mit dem Namen Parameter rufen alle Parameter nicht schreiben, bevor include? Ich möchte so etwas wie dieses

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

tun, aber diese Arbeit scheint nicht? Wie kann ich benannte Parameter mit Parametern verwenden?

+2

diese Frage auf einem Msdn Thread gefunden - sieht aus wie Sie alle Namen müss Argument in der Params-Liste oder etwas? http://bit.ly/GPZvkH –

+0

Danke James. Antwort ist übrigens noch nicht gefunden ... Ich denke, es ist noch nicht in .NET implementiert. –

+0

@ChuckNorris, das hat nichts mit .Net zu tun, nur mit C#. Andere .Net-Sprachen können 'params' und benannte Parameter anders handhaben, so dass das, was Sie wollen, in einer anderen Sprache bereits möglich ist. Außerdem denke ich, dass es kein "noch" gibt: Dies wird sich in zukünftigen Versionen von C# wahrscheinlich nicht ändern. – svick

Antwort

12

I denke der einzige Weg ist so etwas wie:

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

Was ist nicht so toll. Es wäre wahrscheinlich am besten, wenn Sie eine Überladung für das hinzugefügt:

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

Dann rufen Sie Ihre Methode wie

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

Stimmen Sie mit @svick überein - Sie sollten wahrscheinlich ein paar Überladungen für Ihre typischen Anwendungsszenarien hinzufügen. – VinayC

8

Ein params Argument wie ein Array funktioniert, versuchen Sie diese Syntax:

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

(möglicherweise einige Adaptierungs müssen aufgrund der generischen Parameter, aber ich denke, Sie den Kern von ihm bekommen)

+5

Wenn Sie es auf diese Weise tun, ist es nicht sinnvoll, das Schlüsselwort 'params' anzugeben. Dies ist nicht anders als nur ein einfaches Array als letztes Argument zu haben. Das OP fragt, wie man es mit 'params' macht. –

+1

Danke für die Antwort, aber es ist nicht das, was ich genau will ... Rob Levine hat Recht, aber scheint keine Möglichkeit, dies mit Params zu tun. –

+0

Oh, ich verstehe, ich habe missverstanden, was du brauchst. Das Schreiben von Überladungen ist die einzige Alternative, die ich sehe, aber das ist nicht das, was Sie wollen ... – madd0

Verwandte Themen