c# - 合并来自多个来源的不同类

标签 c#

我有 2 个用户对象(都来自不同的数据源)

public class UserA 
{
    String Firstname;
    String Lastname;
    String Upn;
    String Id;
}

public class UserB 
{
    String Firstname;
    String Lastname;
    String Upn;
    String MemberOf;
    String SamAccountName
}

现在用户 X 可能存在于两个数据源中(或者可能只存在于其中一个数据源中)。在那种情况下,字段 upn 将是相同的。理论上 firstnamelastname 也应该相同。因此,如果只使用第一个就可以了(以防出现差异)。

现在我想将这些对象合并在一起,以便获得唯一用户列表。但是两个对象的所有字段(所以我可以将其作为 JSON 返回)

所以最终的对象(如果用户存在于两个来源中看起来像)

public class UserC
{
    String Firstname;
    String Lastname;
    String Upn;
    String Id;
    String MemberOf;
    String SamAccountName
}

最佳答案

这是一种方法。您可以选择如何处理一个列表中不在另一个列表中的项目。

字典用于提高性能。

List<UserA> listA;
List<UserB> listB;

var dictA = listA.ToDictionary(x => x.Upn, x => x);
var dictB = listB.ToDictionary(x => x.Upn, x => x);

foreach(var upn in dictA.Keys.Union(dictB.Keys))
{
   UserC user = new UserC();
   if(dictA.ContainsKey(upn)) //Fill in fields
   if(dictB.ContainsKey(upn)) //Fill in fields     
} 

关于c# - 合并来自多个来源的不同类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51042510/

相关文章:

c# - 对象作为接口(interface)

c# - 使用 pack uri 在 winforms 中加载图像

c# - 如何让Visual Studio 2010 + 2012 + 2013共存?

c# - 如何表示具有相同行为的不同实体?

c# - 在 Visual Studio 编辑器中删除空格指示器

c# - 使用 Lambda 表达式进行 try without catch 是一种不好的做法吗?

c# - 按角色自定义 Sitecore 缓存

c# - 将身份验证/授权功能从 ASP.NET 4.8 迁移到 ASP.NET Core 6

c# - 如何创建和使用自己的 C++ 函数而不是内置的库

c# - NetDataContractSerializer 和 CLR 类型