Mysql 如何按两个id对linq查询进行分组
如何使用两个id的group;我有这样的数据Mysql 如何按两个id对linq查询进行分组,mysql,sql,sql-server,linq,linq-to-sql,Mysql,Sql,Sql Server,Linq,Linq To Sql,如何使用两个id的group;我有这样的数据 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 {
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实现这一点我发现分步执行时更容易看到发生了什么 首先将数据分组
var grouped = data.GroupBy(d => new { d.empid, d.userid });
然后选择结果
var results = grouped.Select(g => g.Select(d => d.profid).ToArray());
每个g是由一对empid和userid设置密钥的组。该组是类实例的集合。所以上面的语句说要从每个组和每个empid userid对中创建一个profid数组。结果证明是正确的
[1, 2]
[5]
这样可以得到所需的数组,但这样会丢失密钥。我不知道你想对结果做些什么,这样也许可以,但可能不行。无论哪种方式,组都包含所需的键和值
解决此问题的另一种方法是使用不同的GroupBy重载,只获取profid作为值
var grouped2 = data.GroupBy(d => new { d.empid, d.userid }, d => d.profid);
这将为您提供一个组,其中密钥是empid和userid对,集合只是profid。这很可能更接近您想要的内容。它必须包含在您的数据中。你的表演没什么问题。也许您可以显示一个完整的运行代码段,该代码段显示了意外行为。@MitchWheat,Q&a显示了如何按多列分组,但这不是问题所在。@GertArnold yah,您现在就在这里,我明白了,谢谢