选择新的关键字组合

时间:2010-02-14 23:12:27

标签: c# linq

在LINQ中,select new关键字组合有什么作用?

我没有找到太多关于此的文档。

由于

3 个答案:

答案 0 :(得分:23)

通过使用select new,您可以使用您正在使用的集合中的数据或对象来创建新对象,无论是键入的anonymously还是正常的。


1。使用select new返回新的匿名类型对象:

var records = from person in people
              select new { person.name, person.id };

这使用new关键字创建一组匿名类型的对象。编译器只创建一个新的对象类型,其中包含两个属性。如果你在调试器中查看对象类型,你会发现它有一个看起来很疯狂的自动生成类型名称。但您也可以使用new关键字,就像您在linq之外使用的那样:


2。使用select new构建“常规”类型的对象:

var records = from person in people
              select new CreditRecord(person.creditLimit, person.name);

此示例使用new关键字,就像您习惯的那样 - 通过其构造函数之一构造一些已知类型的对象。

选择称为转换(或投影)运算符。它允许您通过转换函数将数据放入您正在使用的集合中,以在另一侧为您提供新对象。在上面的例子中,我们只是通过选择person对象的特定属性并用它们做某事来简单地将person对象“转换”为其他类型。因此select new ...的组合实际上只是将new操作指定为select语句的转换函数。对于上述两个例子,这可能更有意义:


第3。使用不select的{​​{1}},无需转化

当然,您不需要同时使用newselect。举个例子:

new

这将返回您正在使用的集合中的原始对象类型 - 没有转换,也没有新的对象创建。


4。使用不var someJohns = from person in people where person.name == "John" select person; 的{​​{1}}进行转化

最后,没有select关键字的转换:

new

它会返回一些新类型的对象,它是从转换函数生成的,而不是直接使用new关键字来构造它。

答案 1 :(得分:1)

select关键字后跟new表达式,可能会创建anonymous type

换句话说,它是以下两个不相关表达式的组合:

select

from a in whatever select 2

Anonymous types

new { Prop1 = 3, Prop2 = DateTime.Now }

答案 2 :(得分:1)

它不是真正的组合,new只是创建一个匿名类型来返回值。否则你将不得不使用Dictionaries / Arrays等(比如PHP),这总是很难看。

var q = 
    from staff in theWhiteHouseStaff
    select new { Name = staff.Name } ;