wom*_*omp 23
通过使用select new,您可以使用正在使用的集合中的数据或对象来创建新对象,无论是匿名还是正常键入.
1. select new用于返回新的匿名类型对象:
var records = from person in people
select new { person.name, person.id };
Run Code Online (Sandbox Code Playgroud)
这使用new关键字创建一组匿名类型的对象.编译器只创建一个新的对象类型,其中包含两个属性.如果你在调试器中查看对象类型,你会发现它有一个看起来很疯狂的自动生成类型名称.但你也可以使用new关键字,就像你习惯在linq之外:
2. select new用于构造"常规"类型的对象:
var records = from person in people
select new CreditRecord(person.creditLimit, person.name);
Run Code Online (Sandbox Code Playgroud)
这个例子new就像你习惯的那样使用关键字 - 通过它的一个构造函数构造一些已知类型的对象.
Select称为转换(或投影)运算符.它允许您通过转换函数将数据放入您正在使用的集合中,以在另一侧为您提供新对象.在上面的例子中,我们只是通过选择person对象的特定属性并用它们做某事来简单地将person对象"转换"为其他类型.所以组合select new ...实际上只是将new操作指定为select语句的转换函数.对于上述两个反例,这可能更有意义:
3.使用selectwithout new,没有转换
当然,你并不需要使用select和new在一起.举个例子:
var someJohns = from person in people
where person.name == "John"
select person;
Run Code Online (Sandbox Code Playgroud)
这将返回您正在使用的集合中的原始对象类型 - 没有转换,也没有新的对象创建.
4.使用selectwithout new,进行转换
最后,没有new关键字的转换:
var personFoods = from person in people
select person.GetFavoriteFoods();
Run Code Online (Sandbox Code Playgroud)
它会返回一些新类型的对象,它是从转换函数生成的,而不是直接使用new关键字来构造它.