2016-12-01 23 views
0

選択クエリで "新しい" を "新しい" を使用し、使用していないの違いです:は、次のように私は2つのクエリを持って

  • Select(a => a.IsAdmin)
  • Select(x => new {x.IsAdmin})

...と私は2つの質問があります:

  • 2つの違いは何ですか?
  • いつ使用し、「new」というキーワードを使用しないでください。
+0

最初は、評価対象のオブジェクトに基づいて 'IsAdmin'の現在の値を返します。 2番目は 'IsAdmin'の新しいオブジェクトをインスタンス化し、デフォルト値を返します。 –

答えて

6

ステートメント

Select(a => a.IsAdmin) 

は一方

ステートメント

Select(x => new {x.IsAdmin}) 

(プロパティIsAdminがboolタイプであると仮定して)IEnumerable<bool>は、戻ります戻りますIEnumerable<*anonymous type*>オブジェクトは、プロパティがの匿名型になりますタイプbool

+1

ほぼ後者は 'IEnumerable 'を返します。 'T'はその匿名型です。 – hvd

+0

私はそれを書く方法についてちょっと考えました...タイプが分かっているので本当にTではありません。 「テンプレート」タイプではありません。あなたはオブジェクトの代わりにTを書く方がはっきりしていると思いますか? – mortb

+0

私はそれをオブジェクトから*匿名型に変更しました* – mortb

4

のは、後者が効果的に各項目にこれを行うのと同等であることを考えてみましょう:

と同等です
var output = new { input.IsAdmin }; 

IsAdminのターゲットプロパティ名があるので

var output = new { IsAdmin = input.IsAdmin }; 

指定されていない場合はソースから推論されます。だから... ...

items.Select(a => a.IsAdmin) 

これはboolの列挙を返します - 各アイテムはitemsの要素のIsAdminの値です。

サンプル戻り値:[True, False, True, True, False]

items.Select(a => new {a.IsAdmin}) 

これは、各オブジェクトが値items内のアイテムの対応IsAdmin性質のものであるIsAdmin性質を有する匿名オブジェクトの列挙を返します。

サンプル戻り値:[{ IsAdmin: True }, { IsAdmin: False }, ...]

あなたの裁量で使用するときに使用します。通常、後者は、単一の値ではなく、各項目に複数のプロパティを返す場合に使用します。

1

単純に考えると、

最初のステートメントでは、単純にネイティブデータタイプのリストを返しています。それはint、bool、stringのように文字列はIsAdmin型に依存します。

2番目のプロパティでは、IsAdminプロパティを持つ匿名型オブジェクトを作成し、このコレクションを返します。

関連する問題