![](/img/trans.png)
[英]what is the most elegant way to update an item in one list from another list in C#?
[英]Elegant way to map some properties in one List based on Id from another List in C#
我有一个User
列表和Branch
列表。 一个Branch
可以有多个User
。 我需要根据BranchId
从Branch
在User
分配一些属性。 这是我的课。
用户:
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.