3

2 つの ID によるグループを使用するにはどうすればよいですか。私は次のようなデータを持っています

empid: 1, usrid: 1, profid: 1
empid: 1, usrid: 1, profid: 2
empid: 2, usrid: 1, profid: 5

私は次のようなクエリを書きました

var query = (from i in data
         group i by new { i.empid, i.usrid} into g
         select new {                         
         profileid = g.Select(z=>z.profileid).ToArray()                         
         }).ToArray();

今、empid:1プロファイルusrid:1ID を の配列として取得したい1,2 との配列として取得したいempid:2usrid:1prof id5

しかし、私は次のように各レコードで3つの値をすべて取得しています1,2,5

linqを使用してそれを取得するにはどうすればよいですか

4

1 に答える 1

1

段階的に行うと、何が起こっているのかを簡単に確認できます。

最初にデータをグループ化します

var grouped = data.GroupBy(d => new { d.empid, d.userid });

次に、結果を選択します

var results = grouped.Select(g => g.Select(d => d.profid).ToArray());

それぞれは、とgのペアでキー付けされたグループです。そのグループは、クラスのインスタンスのコレクションです。したがって、上記のステートメントは、各グループ (各ペア)からの配列を作成することを示しています。結果はempiduseridprofidempid userid

[1, 2]
[5]

これで必要な配列が得られますが、その方法ではキーが失われます。結果で何をしたいのかわからないので、大丈夫かもしれませんが、おそらくそうではありません。どちらの方法でも、グループには必要なキーと値が含まれています。

この問題に対処する別の方法は、別のオーバーロードを使用して を値としてGroupBy取得profidすることです。

var grouped2 = data.GroupBy(d => new { d.empid, d.userid }, d => d.profid);

これにより、キーが and のペアでempidありuserid、コレクションがprofids だけであるグループが得られます。これは、あなたが望むものに近づく可能性が高くなります。

于 2012-12-25T16:06:04.243 に答える