2011-10-01 20 views
5

私はLinqにとって全く新しいので、次のLinqの違いを理解する助けになるかどうか疑問に思っていますか?たとえば...LINQ - .Select(n => n.Name)と.Select(n => new {n.Name})の違い。

//normal select 
var contacts = entity.Contacts.Select(n => n.FirstName); 

//select new 
var contacts2 = entity.Contacts.Select(n => new { n.FirstName }); 

//normal select output 
foreach (var c in contacts) 
    Response.Write(c + "<br/>"); 

//select new output 
foreach (var c in contacts2) 
    Response.Write(c.FirstName + "<br/>"); 

私が見ることができる唯一の違いは、選択新しいで、連絡先オブジェクトがcollectonに保存されているのに対し、通常の選択では、ファーストネーム(文字列)は、コレクションに格納されていることですファーストネームはそのプロパティによってアクセスされる。また、select newは、ステートメントで選択されたプロパティのみを返します。

私が気づいた別の違いは、select newに複数の特定のプロパティを返すことができることです。

どちらのシナリオでどちらを選択しますか?

ありがとうございました。

+1

ここにシナリオがあります: 'select new {n.FirstName、n.LastName}' –

答えて

20

n => n.FirstNameは、一般的にはFirstName

と呼ばれる1つのstringプロパティで、ただ一つの特性を持つ匿名型は、そう、あなたが探しているものはおそらくありませんが、あなたにanonymous typeを与えるあなたstring

n => new { n.FirstName }を与えます私は最初の選択肢に行くだろう。あなたは匿名型に精通していない場合、ILDASMをクラックし、それへの入力として、あなたのexeファイルを与える

:リチャードのEvの答えをサポートする

6

あなたはこのようなものでしょう:

enter image description here

あなたは<> f_AnonymousType(で始まるを参照のこと)は、リチャード・EVが話しているものです。 newの構文が新しいクラスに変換されました(名前はコンパイラによって決定されました)。だから、varというキーワードは、匿名のタイプを扱うのに非常に役立ちます。