Vamos secuencialmente sobre su pregunta:
1. ¿seleccione un elemento de retorno en una colección? -> No, absolutamente no. 'seleccionar' devuelve exactamente el mismo número de elementos que están en la colección, pero en forma diferente (si se desea).
Pero, sí, devuelve una secuencia (/ colección) que tiene todos esos elementos (por ejemplo, even_sqare en el ejemplo siguiente).
por ejemplo
int[] even = {2,4}; int[] even_square = even.Select(n=> n*2).ToArray();
o/p
salidas even_square a {4,8}
que es exactamente el mismo en los recuentos (2), pero de proyección diferente, dimos cuadrados de cada seleccionándolas.
2. & selecciona muchos aplanar una colección (por ejemplo, Lista>())?
-> sí, pero en realidad, es como una combinación cruzada con nuestro control.
int[] odd = { 1, 3 };
int[] even = { 2, 4 };
int[] crossjoin =
even.SelectMany(
n => odd, //combining even with odd
(n,o)=>Convert.ToInt32(n.ToString()+o.ToString())//given many selects, decide our projection
).ToArray();
foreach (var item in crossjoin)
{
Console.WriteLine(item);
}
Output: 21
23
41
43
Ahora una cosa del millón:
- A diferencia de la mayoría de los operadores de LINQ, SelectMany toma dos colecciones, en lugar de uno.
- "par" es la primera colección, e impar es la segunda colección, que pasamos usando lambda como este 'n => impar'. (Aquí es donde la gente dice que se aplana)
- tercer parámetro (en la declaración anterior, segundo parámetro) es TResult que nos da salida que es de combinación cruzada y eso es belleza de SelectMany si lo entendimos.
- Disfruta aprendiendo.
pregunta dupe - vea http://stackoverflow.com/questions/958949/difference-between-select-and-selectmany para una excelente respuesta. –