【发布时间】:2015-11-09 09:14:17
【问题描述】:
我有两个列表,我想合并到一个列表中。 Active Directory 中的计算机列表和 SCCM 中的计算机列表。
ListA 包含:
public string ComputerName { get; set; }
public string OperatingSystem { get; set; }
public DateTime? LastLogon { get; set; }
ListB 包含:
public string ComputerName { get; set; }
public DateTime[] AgentTime { get; set; }
public string LastLogonUserName { get; set; }
我想通过 ComputerName 进行合并,但如果我使用(示例)进行连接:
var query = from ObjectA in ListA
join ObjectB in ListB on ObjectA.ComputerName equals ObjectB.ComputerName
select new { computername = ObjectA.ComputerName, lastlogonusername = ObjectB.LastLogonUserName };
它只显示两个列表的结果。我想列出 AD 中的计算机,并为那些也在 SCCM 中的计算机提供附加信息
ListC 包含:
public string ComputerName { get; set; }
public string OperatingSystem { get; set; }
public DateTime? LastLogon { get; set; }
public DateTime[] AgentTime { get; set; }
public string LastLogonUserName { get; set; }
最好的方法是什么?
【问题讨论】:
-
你得到的输出是你内部连接的结果。
-
在以下网页上查看左外连接:code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b
-
您正在通过
new {}创建一个动态对象。如果需要,创建一个自定义类。 -
正如@AmitKumarGhosh 所说,这是一个内部连接。做一个左连接,你会得到你想要的信息。有很多左连接 LINQ 示例
-
你能举个例子来说明你想要的输出吗?我不明白。通过 cmets,我可以理解您想要左连接?是这样吗?这意味着您将获得 A 中的所有项目,如果它在 B 中也有一对,它将被配对。否则,它将与 null/默认值配对。