Select new keyword combination
c#, linq
Solution
By using `select new`, you can use the data or objects in the set you are working with to create new objects, either typed anonymously or normally.
1. Using `select new` to return new anonymously typed objects:
var records = from person in people
select new { person.name, person.id };
This uses the `new` keyword to create a set of anonymously typed objects. A new object type is simply created by the compiler, with two properties in it. If you look at the object type in the debugger, you'll see that it has a crazy-looking, auto-generated type name. But you can also use the `new` keyword just like you're used to outside of linq:
2. Using `select new` to construct "regularly" typed objects:
var records = from person in people
select new CreditRecord(person.creditLimit, person.name);
This example uses the `new` keyword just like you're used to - to construct some known type of object via one of its constructors.
Select is called a transformation (or projection) operator. It allows you to put the data in the set that you are working with through a transformation function, to give you a new object on the other side. In the examples above, we're simply "transforming" the person object into some other type by choosing only specific properties of the person object, and doing something with them. So the combination of `select new ...` is really just specifying the `new` operation as the transformation function of the `select` statement. That might make more sense with a counter example to the above two:
3. Using `select` without `new`, with no transformation
Of course you do not need to use `select` and `new` together. Take this example:
var someJohns = from person in people
where person.name == "John"
select person;
This gives you back the original object type that was in the set you were working with - no transformation, and no new object creation.
4. Using `select` without `new`, with a transformation
And finally, a transformation without the `new` keyword:
var personFoods = from person in people
select person.GetFavoriteFoods();
which gives you back some new type of object, generated from the transformation function and not by directly using the `new` keyword to construct it.
Problem
In LINQ, what does the `select new` keyword combination do? I haven't found much documentation on this. Thanks