選択クエリで "新しい" を "新しい" を使用し、使用していないの違いです:は、次のように私は2つのクエリを持って
Select(a => a.IsAdmin)
Select(x => new {x.IsAdmin})
...と私は2つの質問があります:
- 2つの違いは何ですか?
- いつ使用し、「new」というキーワードを使用しないでください。
選択クエリで "新しい" を "新しい" を使用し、使用していないの違いです:は、次のように私は2つのクエリを持って
Select(a => a.IsAdmin)
Select(x => new {x.IsAdmin})
...と私は2つの質問があります:
ステートメント
Select(a => a.IsAdmin)
は一方
ステートメント
Select(x => new {x.IsAdmin})
(プロパティIsAdminがbool
タイプであると仮定して)IEnumerable<bool>
は、戻ります戻りますIEnumerable<*anonymous type*>
オブジェクトは、プロパティがの匿名型になりますタイプbool
のは、後者が効果的に各項目にこれを行うのと同等であることを考えてみましょう:
と同等です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 }, ...]
。
あなたの裁量で使用するときに使用します。通常、後者は、単一の値ではなく、各項目に複数のプロパティを返す場合に使用します。
単純に考えると、
最初のステートメントでは、単純にネイティブデータタイプのリストを返しています。それはint、bool、stringのように文字列はIsAdmin型に依存します。
2番目のプロパティでは、IsAdminプロパティを持つ匿名型オブジェクトを作成し、このコレクションを返します。
最初は、評価対象のオブジェクトに基づいて 'IsAdmin'の現在の値を返します。 2番目は 'IsAdmin'の新しいオブジェクトをインスタンス化し、デフォルト値を返します。 –