Во-первых, основной ответ:
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 };
});
Тогда, как вы выясните эти вещи сами?
Сначала скачайте Reflector с here и установите его.
Затем создайте образец программы, как небольшую консольную программу, содержащую код, который вы хотите проанализировать. Вот код, который я написал:
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 };
}
}
}
Тогда вы строите, что и открытый отражатель, и попросить его, чтобы открыть файл с расширением .exe в вопросе.
Затем вы переходите к рассматриваемому методу, который в моем случае был ConsoleApplication11.Program.Main
.
Хитрость здесь заключается в том, чтобы перейти на страницу параметров Reflector и попросить показать синтаксис C# 2.0, который заменит Linq соответствующими вызовами статических методов. Делать это дает мне следующий код:
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 };
});
}
Сейчас, конечно, этот код может быть написан немного симпатичнее с лямбды и похожи, как то, что @mquandershowed, но с отражателем, по крайней мере, вы должны быть в состоянии понять вызов метода.
Для вашей будущей ссылки на этот вопрос отвечает спецификация C# 3.0, которую вы можете загрузить из Интернета. Здесь указаны все правила преобразования запросов. –
ty, не знал, что правила трансформации были задокументированы. –