D'abord, la réponse de base:
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 };
});
Alors, comment voulez-vous comprendre ces choses vous-même?
D'abord, téléchargez Reflector depuis here et installez-le. Ensuite, construisez un exemple de programme, comme un petit programme de console, contenant le code que vous voulez analyser. Voici le code que j'ai écrit:
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 };
}
}
}
Alors vous construisez que, et le réflecteur ouvert, et lui demander d'ouvrir le fichier .exe en question.
Ensuite, vous accédez à la méthode en question, qui dans mon cas était ConsoleApplication11.Program.Main
.
L'astuce ici est d'aller à la page d'options de Reflector, et de lui demander d'afficher la syntaxe C# 2.0, qui remplacera Linq par les appels de méthodes statiques appropriés. En faisant cela me donne le code suivant:
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 };
});
}
Maintenant, bien sûr, ce code peut être écrit un peu plus jolie avec lambdas et similaire, comme ce @mquandershowed, mais avec réflecteur, au moins, vous devriez être en mesure de comprendre la les appels de méthode sont impliqués.
Pour votre future référence, cette question est répondue dans la spécification C# 3.0, que vous pouvez télécharger sur Internet. Toutes les règles de transformation de requête sont spécifiées ici. –
ty, ne savait pas que les règles de transformation étaient documentées. –