3

我如何使用两个 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:1andusrid:1我想获取配置文件 ID 作为 and 的数组并且1,2empid:2usrid:1获取prof id5

但我得到了每条记录中的所有三个值,比如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都是由一对empid和键控的组userid。该组是您的类的实例集合。profid所以上面的语句说要从每个组(每empid userid对)中创建一个 s 数组。结果是

[1, 2]
[5]

这会让你得到你想要的数组,但是你会这样丢失密钥。我不知道你想对结果做什么,所以这可能没问题,但可能不是。无论哪种方式,组都包含您想要的键和值。

解决该问题的另一种方法是使用不同的重载GroupBy来获取profid值。

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

这将为您提供一个组,其键是empidanduserid和集合只是profids。这更有可能更接近您想要的。

于 2012-12-25T16:06:04.243 回答