如何用LINQ合并同公司Admin用户的邮箱为单条记录?
用LINQ实现需求的方案
完全可以用LINQ实现你要的功能,核心思路是先筛选、再分组、最后拼接投影,具体代码如下:
var adminUsersByCompany = bUsers // 第一步:只保留UserPersonas包含"Admin"的用户 .Where(user => user.UserPersonas.Contains("Admin")) // 第二步:按公司名称分组(替换你原来的组合分组键) .GroupBy(user => user.CompanyName) // 第三步:投影成需要的结构,拼接同一公司的邮箱 .Select(group => new { CompanyName = group.Key, UserEmails = string.Join(";", group.Select(user => user.UserEmail)) }) .ToList();
补充说明:
- 如果同一公司存在重复的邮箱记录,可以在筛选后加一步去重,避免拼接重复邮箱:
var adminUsersByCompany = bUsers .Where(user => user.UserPersonas.Contains("Admin")) // 去重同一公司下的重复邮箱 .DistinctBy(user => new { user.CompanyName, user.UserEmail }) .GroupBy(user => user.CompanyName) .Select(group => new { CompanyName = group.Key, UserEmails = string.Join(";", group.Select(user => user.UserEmail)) }) .ToList(); - 你原来的代码是按
CompanyName + UserEmail组合分组,这和需求不符,所以要把分组键改成单独的CompanyName。
内容的提问来源于stack exchange,提问作者Michael Tucker
相关产品推荐
相关产品推荐

