2011-10-01 75 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並通過其屬性訪問firstname。另外,select new返回僅在語句中選擇的屬性。

我注意到的另一個區別是,您可以在select new中返回多個特定屬性。

在什麼情況下你會選擇一個嗎?

感謝您的幫助。

+1

下面是一個場景:'select new {n.FirstName,n.LastName}' –

回答

20

n => n.FirstName給你一個string

n => new { n.FirstName }給你一個anonymous type,一個string屬性調用FirstName

一般情況下,一個匿名類型只有一個屬性也可能是你正在尋找沒有什麼,所以我會選擇第一個選項。

6

爲了支持理查德EV的回答是:

如果你不熟悉的匿名類型,破解了反彙編,給你的exe文件作爲輸入給它。

你會得到這樣的事情:

enter image description here

,你看到開始<事情> f_AnonymousType()是理查德·EV都在談論一個。你的語法new被翻譯成一個新類(名字由編譯器決定)。這就是爲什麼var關鍵字對於匿名類型非常有用。

相關問題