Zunächst wird die grundlegende Antwort:
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 };
});
Dann, wie kommst du darauf, diese Dinge aus sich selbst?
Zuerst Reflektor von here herunterladen und installieren.
Erstellen Sie dann ein Beispielprogramm, wie ein kleines Konsolenprogramm, das den Code enthält, den Sie analysieren möchten. Hier ist der Code, den ich schrieb:
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 };
}
}
}
Dann bauen Sie das, und offene Reflektor, und fordert diese auf die EXE-Datei in Frage zu öffnen.
Dann navigieren Sie zu der betreffenden Methode, die in meinem Fall ConsoleApplication11.Program.Main
war.
Der Trick hier ist, auf die Optionen-Seite von Reflector zu gehen, und es zu fragen, C# 2.0-Syntax zu zeigen, die Linq mit den entsprechenden statischen Methodenaufrufen ersetzen wird. das zu tun gibt mir den folgenden Code:
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 };
});
}
Nun, natürlich, diesen Code kann ein bisschen hübscher mit Lambda und ähnlich geschrieben werden, wie das, was @mquandershowed, aber mit Reflektor, zumindest sollten Sie in der Lage sein, das zu verstehen, Methodenaufrufe beteiligt sein.
Für Ihre Zukunft, diese Frage wird in der C# 3.0-Spezifikation beantwortet, die Sie weg von dem Internet herunterladen können. Alle Abfragetransformationsregeln sind dort angegeben. –
ty, wusste nicht, dass die Transformationsregeln dokumentiert wurden. –