まず、基本的な答え:
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 };
});
はその後、どのようにこれらの事を自分で把握できますか?
まず、リフレクターを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のオプションページに移動し、Linqを適切な静的メソッド呼び出しで置き換えるC#2.0構文を表示するように求めます。このコードは何@mquandershowedのように、ラムダと類似して少しきれいに書き込むことができ、もちろん、今
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 };
});
}
が、リフレクターで、少なくともあなたは理解することができるはずです。それを行うことは私に次のコードを提供しますメソッド呼び出しが関与しています。
今後の参考になるように、この質問はC#3.0仕様書に記載されており、インターネットからダウンロードできます。そこにはすべてのクエリ変換ルールが指定されています。 –
tyは、変換ルールが文書化されたことを知らなかった。 –