Pregunta

¿Cómo sería el siguiente aspecto consulta si yo estaba usando la sintaxis 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 }
¿Fue útil?

Solución

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 });

Otros consejos

En primer lugar, 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 averiguar estas cosas por ti mismo?

En primer lugar, descargar reflector de aquí , e instalarlo.

A continuación, crear un programa de ejemplo, como un programa de consola pequeña, que contiene el código que desea analizar. Aquí está el código que he escrito:

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 };
        }
    }
}

A continuación, se genera eso, y el reflector abierto, y le pedirá que abra el archivo .exe en cuestión.

A continuación, se desplaza al método en cuestión, que en mi caso era ConsoleApplication11.Program.Main.

El truco aquí es ir a la página de opciones de reflector, y le pedirá que mostrar C # 2.0 sintaxis, que sustituirá a LINQ con las llamadas a métodos estáticos adecuados. Haciendo que 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 bonita con lambdas y similares, al igual que lo @mquander mostró , pero con reflector, al menos se debería ser capaz de entender las llamadas a métodos estar involucrados.

Desde el compilador hace esto traducción para usted, el fuego de Reflector y tomar una mirada.

Sé que esto es una cuestión de edad, pero para los nuevos lectores, echar un vistazo a este código gitub .

Este uso Roslyn para tomar sintaxis de la consulta y la convierten a la sintaxis método de extensión.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top