将多个记录分组在一个记录中
Grouping multiple records in one single record
我有两个 类 -
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 | abc@ab.com | R123 | Read | NULL | NULL
| 1 | Anil | Surname1 | abc@ab.com | R234 | Write | NULL | NULL
| 1 | Anil | Surname1 | abc@ab.com | null | null | G1 | Group1
| 1 | Anil | Surname1 | abc@ab.com | null | null | G2 | Group2
现在我想把它转换成 FinalUsers
|UserId | UserFirstName | UserLastName | UserEmail | UserRoleId | UserRoleName | UserGroupId | UserGroupName
| 1 | Anil | Surname1 | abc@ab.com | 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
}
我确定上面的查询不正确,请您帮我更正一下。或者建议另一种方法来实现结果。
我认为问题出在您的 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()
}
还值得一提的是,你的类'结构有冗余信息,如:用户的名字和姓氏、用户的电子邮件、组名和角色名,你最好使不同的类 用于用户信息、组信息和角色信息。
我有两个 类 -
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 | abc@ab.com | R123 | Read | NULL | NULL
| 1 | Anil | Surname1 | abc@ab.com | R234 | Write | NULL | NULL
| 1 | Anil | Surname1 | abc@ab.com | null | null | G1 | Group1
| 1 | Anil | Surname1 | abc@ab.com | null | null | G2 | Group2
现在我想把它转换成 FinalUsers
|UserId | UserFirstName | UserLastName | UserEmail | UserRoleId | UserRoleName | UserGroupId | UserGroupName
| 1 | Anil | Surname1 | abc@ab.com | 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
}
我确定上面的查询不正确,请您帮我更正一下。或者建议另一种方法来实现结果。
我认为问题出在您的 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()
}
还值得一提的是,你的类'结构有冗余信息,如:用户的名字和姓氏、用户的电子邮件、组名和角色名,你最好使不同的类 用于用户信息、组信息和角色信息。