繁体   English   中英

C#列表中的行分组

[英]Row grouping in a C# list

我有下面的课

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
            });
        }
    }
}

我想要的是按用户ID将List<test> lst列表中的值分组,但仍存储所有Mission.MissionAcrynom字符串数组中每个唯一的userId行的所有过滤行的首字母缩写值。

因此,您想为每个用户组将所有missionAcrynom展平为更大的数组吗?

您可以使用group.SelectMany(...).ToArray()

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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM