c# - ordenar - GroupBy con la sintaxis del método linq(no la sintaxis de consulta)
linq c# tutorial español (4)
Como el compilador hace esta traducción por usted, encienda here y eche un vistazo.
¿Cómo se vería la siguiente consulta si estuviera usando la sintaxis del método de extensión?
var query = from c in checks
group c by string.Format("{0} - {1}", c.CustomerId, c.CustomerName)
into customerGroups
select new { Customer = customerGroups.Key, Payments = customerGroups }
Primero, la respuesta básica:
var query = checks.GroupBy<Customer, string>(delegate (Customer c) {
return string.Format("{0} - {1}", c.CustomerId, c.CustomerName);
}).Select(delegate (IGrouping<string, Customer> customerGroups) {
return new { Customer = customerGroups.Key, Payments = customerGroups };
});
Entonces, ¿cómo descubres estas cosas tú mismo?
Primero, descargue Reflector desde here , e instálelo.
Luego, cree un programa de muestra, como un programa de consola pequeño, que contenga el código que desea analizar. Aquí está el código que escribí:
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication11
{
public class Customer
{
public Int32 CustomerId;
public Int32 CustomerName;
}
class Program
{
static void Main(string[] args)
{
var checks = new List<Customer>();
var query = from c in checks
group c by String.Format("{0} - {1}", c.CustomerId, c.CustomerName)
into customerGroups
select new { Customer = customerGroups.Key, Payments = customerGroups };
}
}
}
Luego construye eso, abre el reflector y pídele que abra el archivo .exe en cuestión.
Luego navega hasta el método en cuestión, que en mi caso fue ConsoleApplication11.Program.Main
.
El truco aquí es ir a la página de opciones de Reflector y pedirle que muestre la sintaxis de C # 2.0, que sustituirá a Linq con las llamadas al método estático apropiado. Haciendo eso me da el siguiente código:
private static void Main(string[] args)
{
List<Customer> checks = new List<Customer>();
var query = checks.GroupBy<Customer, string>(delegate (Customer c) {
return string.Format("{0} - {1}", c.CustomerId, c.CustomerName);
}).Select(delegate (IGrouping<string, Customer> customerGroups) {
return new { Customer = customerGroups.Key, Payments = customerGroups };
});
}
Ahora, por supuesto, este código se puede escribir un poco más bonito con lambdas y similares, como lo que showed , pero con Reflector, al menos debería ser capaz de entender las llamadas de método que están involucradas.
Se vería así:
var query = checks
.GroupBy(c => string.Format("{0} - {1}", c.CustomerId, c.CustomerName))
.Select (g => new { Customer = g.Key, Payments = g });