LINQ - .Select(n => n.Name)和.Select(n => new {n.Name})之间的区别;

时间:2011-10-01 14:52:40

标签: c# .net linq entity-framework

我是Linq的新手,想知道你是否可以帮助我理解以下Linq之间的区别?例如......

//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/>");

我能看到的唯一区别是,在正常选择中,firstname(字符串)存储在集合中,而在select new中,联系对象存储在collecton中,firstname由其属性访问。 select new也返回仅在语句中选择的属性。

我注意到的另一个不同之处是您可以在select new中返回多个特定属性。

在什么情况下你会选择一个而不是另一个?

感谢您的帮助。

2 个答案:

答案 0 :(得分:20)

n => n.FirstName为您提供string

n => new { n.FirstName }为您提供anonymous type,其中一个string属性名为FirstName

一般来说,只有一个属性的匿名类型可能不是你想要的,所以我会选择第一个选项。

答案 1 :(得分:6)

支持Richard Ev的回答:

如果您不熟悉匿名类型,请破解ildasm并将您的exe作为输入。

你会得到这样的东西:

enter image description here

你看到以&lt;&gt; f_AnonymousType()开头的东西是Richard Ev所说的那个。您的new语法被翻译成一个新类(名称由编译器决定)。这就是var关键字在使用匿名类型时如此有用的原因。