2014-02-25 1 views
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; } 
} 

아래의 클래스 다음과 같은 코드가 있습니다. 내가 원하는 무엇

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

는 userId를하여 내 List<test> lst 목록에서 그룹에 값이지만, 여전히 각각의 고유 한 사용자 ID 행의 missionAcrynom 문자열 배열의 모든 필터링 된 행에 대한 모든 mission.Acronym 값을 저장합니다.

답변

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