2017-09-04 157 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

對不起。檢查我的新更新。 –