我如何使用两个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:1
,我希望将个人资料ID作为1,2
的数组
对于empid:2
和usrid:1
,我想prof id
为5
但我得到的每条记录中的所有三个值都是1,2,5
我怎样才能使用linq
答案 0 :(得分:0)
当我逐步完成时,我发现更容易看到发生了什么。
首先对数据进行分组
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
的数组。结果结果是
[1, 2]
[5]
它可以获得你想要的数组,但是你会失去那些键。我不知道你想对结果做什么,所以可能没问题,但可能没有。无论哪种方式,组都包含您想要的键和值。
解决问题的另一种方法是使用GroupBy
的不同重载来仅将profid
作为值。
var grouped2 = data.GroupBy(d => new { d.empid, d.userid }, d => d.profid);
这会为您提供一个组,其中一个键是empid
和userid
,而该集合只是profid
。这更可能更接近你想要的。