2014-02-25 51 views
0

我有以下排在C#列表分組

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

我要的是集團的價值觀在我List<test> lst列表中用戶id,但仍存儲所有mission.Acronym值的missionAcrynom字符串數組爲每個唯一的用戶ID行中的所有過濾行。

回答

0

因此,您想要將所有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();