如何用两个id对linq查询进行分组

时间:2012-12-21 09:30:49

标签: mysql sql sql-server linq linq-to-sql

我如何使用两个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:1usrid:1,我希望将个人资料ID作为1,2的数组 对于empid:2usrid:1,我想prof id5

但我得到的每条记录中的所有三个值都是1,2,5

我怎样才能使用linq

1 个答案:

答案 0 :(得分:0)

当我逐步完成时,我发现更容易看到发生了什么。

首先对数据进行分组

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

然后选择结果

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

每个g都是由一对empiduserid键入的组。该组是您班级实例的集合。所以上面的声明说要从每个组(每个profid empid对)制作一个userid的数组。结果结果是

[1, 2]
[5]

它可以获得你想要的数组,但是你会失去那些键。我不知道你想对结果做什么,所以可能没问题,但可能没有。无论哪种方式,组都包含您想要的键和值。

解决问题的另一种方法是使用GroupBy的不同重载来仅将profid作为值。

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

这会为您提供一个组,其中一个键是empiduserid,而该集合只是profid。这更可能更接近你想要的。