繁体   English   中英

基于 C# 中另一个列表中的 Id 映射一个列表中某些属性的优雅方法

[英]Elegant way to map some properties in one List based on Id from another List in C#

我有一个User列表和Branch列表。 一个Branch可以有多个User 我需要根据BranchIdBranchUser分配一些属性。 这是我的课。

用户

public class User
{
    public Guid Id { get; set; }
    public bool Active { get; set; }
    public Guid BranchId { get; set; }
    public string BranchName { get; set; }
}

分支:

public class Branch
{
    public Guid Id { get; set; }
    public bool Active { get; set; }
    public string BranchName { get; set; }
}

这是我尝试过的,

foreach (var user in vm)
{
   var branch = branches.Single(b => b.Id.Equals(user.BranchId));
   user.BranchName = branch.BranchName;   
}

现在这可行,但我觉得这不是一个好的解决方案,因为迭代用户并每次为该用户获取分支并分配它。 列表中的多个用户可能具有相同的BranchId在这种情况下,就像我一次又一次地阅读同一个分支一样。 使用 LINQ 的任何更好的解决方案或者可以以任何方式改进? 请协助。

好吧,您可以创建一个从分支 ID 到品牌名称的字典映射:

var branchIdToBrandName = branches.ToDictionary(b => b.Id, b => b.BrandName);
foreach (var user in users)
{
    user.BrandName = branchIdToBranchName[user.BranchId];
}

这是假设每个分支 ID 正好有一个分支,并且每个用户的分支 ID 都被覆盖。 如果您需要对其他属性执行相同操作,您可能只想将分支 ID 映射到分支,而不是直接映射到品牌名称,例如:

var branchIdToBranch = branches.ToDictionary(branch => branch.Id);
foreach (var user in users)
{
    user.BrandName = branchIdToBranch[user.BranchId].BrandName;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM