2012-03-26 24 views
23

データベースから値を取得する方法があります。パラメータ付きの名前付きパラメータ

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

どのように私はinclude前に、すべてのパラメータを記述しないようにという名前のパラメータでこの関数を呼び出すことができますか? 私はこの

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

のような何かをしたい。しかし、これは働いていないようですか? 名前付きパラメータをparamsで使用するにはどうすればよいですか?

+2

のようなあなたのメソッドを呼び出すMSDNのスレッドでこの質問を見つけました - あなたはすべての名前を付ける必要があるだろうように見えますparamsリストなどの引数? http://bit.ly/GPZvkH –

+0

Jamesに感謝します。ところで、答えはまだ見つかりません...私はそれがまだ.NETで実装されていないと思う。 –

+0

@ChuckNorris、これは.Netとは何の関係もなく、C#でしかありません。他の.Net言語では、 'params'と名前付きパラメータを別々に扱うことができるので、あなたが望むものはすでに他の言語でも可能かもしれません。また、「まだ」というものはないと思います。これはC#の将来のバージョンでは変更されそうにありません。 – svick

答えて

12

I唯一の方法は次のようなものだと考えてください:

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

これはあまり良くありません。それはあなたがそのための過負荷追加した場合、おそらく最高のようになります。

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

を次に、あなただけの

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

@svickに同意してください - 一般的な使用シナリオには、おそらくいくつかのオーバーロードを追加する必要があります。 – VinayC

8

params引数が配列のように機能し、この構文を試してみてください。

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

(起因する一般的なパラメータにいくつかの適応を必要とするが、私はあなたがそれの要点を取得すると思うかもしれない)

+5

このようにすれば、 'params'キーワードが指定されていることはありません。これは、最後の引数として単純な配列を持つだけのことではありません。 OPはparamsでそれをどうやって行うのかを尋ねています。 –

+1

答えに感謝しますが、私が正確にしたいことではありません... Rob Levineは正しいですが、paramsでこれを行う方法はありません。 –

+0

ああ、私はあなたが必要としていたことを誤解していました。私が見る唯一の選択肢は、オーバーロードを書くことですが、それはあなたが望むものではありません。 – madd0

関連する問題