Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#列表中的行分组_C#_C# 4.0 - Fatal编程技术网

C#列表中的行分组

C#列表中的行分组,c#,c#-4.0,C#,C# 4.0,我有下面的班级 public class test { public long missionId { get; set; } public string[] missionAcrynom { get; set; } public Guid userId { get; set; } public string userName { get; set; } public string email { get; set; } } 和下面的代码 usi

我有下面的班级

public  class test
{
    public long missionId { get; set; }  
    public string[] missionAcrynom { get; set; }
    public  Guid userId { get; set; }
    public string userName { get; set; }
    public string email { get; set; }
}
和下面的代码

using (var ctx = new dbContext())
{
    var userList = (from u in ctx.aspnet_Users select new {u.UserId, u.UserName}).ToList();

    List<test> lst = new List<test>();
    foreach (var user in userList)
    {
        var UserMissionList = (from m in ctx.UserMission from rpt in ctx.Report
                               where m.UserId == user.UserId
                       select new
                       {
                           m.MissionId,
                           m.Mission.Acronym,
                           m.UserId,
                           m.aspnet_Membership.aspnet_Users.UserName,
                           m.aspnet_Membership.Email
                       }).Distinct().ToList();

        foreach (var mission in UserMissionList)
        {
            lst.Add(new test
            {
                    userId = mission.UserId,                            
                    missionId = mission.MissionId,
                    missionAcrynom = new[] {mission.Acronym},
                    userName = mission.UserName,
                    email = mission.Email
            });
        }
    }
}
使用(var ctx=new dbContext())
{
var userList=(从ctx.aspnet_用户中的u选择新的{u.UserId,u.UserName});
List lst=新列表();
foreach(userList中的var用户)
{
var UserMissionList=(来自ctx.UserMission中的m,来自ctx.Report中的rpt
其中m.UserId==user.UserId
选择新的
{
m、 任务ID,
m、 使命,缩写,
m、 用户ID,
m、 aspnet_Membership.aspnet_Users.UserName,
m、 aspnet_Membership.Email
}).Distinct().ToList();
foreach(UserMissionList中的var任务)
{
添加(新测试)
{
userId=mission.userId,
missionId=mission.missionId,
missionAcrynom=new[]{mission.Acronym},
用户名=mission.userName,
email=mission.email
});
}
}
}

我想要的是将我的
列表lst
列表中的值按用户ID分组,但仍然存储所有任务。missionAcrynom字符串数组中每个唯一用户ID行的所有筛选行的首字母缩写值。

那么您想要将所有
missionAcrynom
扁平化为每个用户组的更大数组吗

您可以使用
组。选择many(…).ToArray()

列表组=lst
.GroupBy(t=>new{t.userId,t.userName,t.email})
.选择(g=>新测试
{  
userId=g.Key.userId,
missionId=g.First().missionId,//任意取第一个
missionAcrynom=g.SelectMany(t=>t.missionAcrynom).ToArray(),
userName=g.Key.userName,
email=g.Key.email
})
.ToList();
List<test> groups = lst
    .GroupBy(t => new { t.userId, t.userName, t.email })
    .Select(g => new test
           {  
               userId = g.Key.userId,                            
               missionId = g.First().missionId, // take the first arbitrarily
               missionAcrynom = g.SelectMany(t => t.missionAcrynom).ToArray(),
               userName = g.Key.userName,    
               email = g.Key.email 
           })
    .ToList();