2017-09-04 117 views
0

我有两个类 -分组在一个单独的记录多个记录

public class MyUser 
{ 
    public string UserID{ get; set; } 
    public string UserFirstName{ get; set; } 
    public string UserLastName{ get; set; } 
    public string UserEmail{ get; set; } 
    public string RoleId{ get; set; } 
    public string RoleName { get; set; } 
    public string GroupId{ get; set; } 
    public string GroupName{ get; set; } 
} 

public class FinalUsers 
{ 
    public string UserID{ get; set; } 
    public string UserFirstName{ get; set; } 
    public string UserLastName{ get; set; } 
    public string UserEmail{ get; set; } 
    public List<string> RoleId{ get; set; } 
    public List<string> RoleName { get; set; } 
    public List<string> GroupId{ get; set; } 
    public List<string> GroupName{ get; set; } 
} 

我得到记录MYUSER作为.NET列表 -

|UserId | UserFirstName | UserLastName | UserEmail | UserRoleId | UserRoleName | UserGroupId | UserGroupName 
| 1  | Anil   | Surname1  | [email protected] | R123  | Read   | NULL  | NULL 
| 1  | Anil   | Surname1  | [email protected] | R234  | Write  | NULL  | NULL 
| 1  | Anil   | Surname1  | [email protected] | null  | null   | G1   | Group1 
| 1  | Anil   | Surname1  | [email protected] | null  | null   | G2   | Group2 

现在我想将其转换成FinalUsers

|UserId | UserFirstName | UserLastName | UserEmail | UserRoleId | UserRoleName | UserGroupId | UserGroupName 
| 1  | Anil   | Surname1  | [email protected] | R123,R234 | Read,Write | G1,G2  | Group1,Group2 

不知道如何在linq中分组 -

from p in myUserList 
    group p by new 
    { 
     p.RoleId, 
     p.RoleName, 
     p.GroupId, 
     p.GroupName, 
    } into gcs 
    select new FinalUsers() 
    { 
     UserId = gcs.FirstOrDefault().UserId, 
     UserFirstName = gcs.FirstOrDefault().UserFirstName , 
     UserLastName = gcs.FirstOrDefault().UserLastName , 
     UserEmail = gcs.FirstOrDefault().UserEmail , 
     RoleId = gcs.RoleId, 
     RoleName = gcs.RoleName, 
     GroupId= gcs.GroupId, 
     GroupName= gcs.GroupName 
    } 

我确定上述查询不正确,请您帮我解决。或者提出另一种实现结果的方式。

回答

2

我认为这个问题是在你的group by声明:

from p in myUserList 
    group p by p.UserId into gcs 
    select new FinalUsers() 
    { 
     UserId = gcs.Key, 
     UserFirstName = gcs.Select(g => g.UserFirstName).First() , 
     UserLastName = gcs.Select(g => g.UserLastName).First(), 
     UserEmail = gcs.Select(g => g.UserEmail).First() , 
     RoleId = gcs.Select(g => g.RoleId).ToList(), 
     RoleName = gcs.Select(g => g.RoleName).ToList(), 
     GroupId= gcs.Select(g => g.GroupId).ToList(), 
     GroupName= gcs.Select(g => g.GroupName).ToList() 
    } 

还值得一提的是你的类构造具有冗余信息:用户名和姓,用户的电子邮件,组名,角色名称,您最好为用户信息,组信息和角色信息制作不同的类别。

+0

它未能在compilte时间 - 错误\t CS1061 \t“IGrouping <串,MYUSER>”不包含关于“角色ID”和没有扩展方法的定义“角色ID”接受型的第一参数“IGrouping <串,MYUSER >'可以找到(你是否缺少使用指令或程序集引用?) –

+0

它在分配gcs.RoleId,gcs.RoleName,gcs.GroupId,gcs.GroupName时抛出错误 –

+0

对不起。检查我的新更新。 –