这是自定义对象的定义方式:
public class AccountDomain
{
public string MAILDOMAIN { get; set; }
public string ORG_NAME { get; set; }
}
这就是我填充对象列表的方式:
List<AccountDomain> mainDBAccountDomain = mainDB.GetAllAccountsAndDomains();
List<AccountDomain> manageEngineAccountDomain = ManageEngine.GetAllAccountsAndDomains();
此代码工作正常 - 如果我查看本地窗口,我可以在mainDBAccountDomain和manageEngineAccountDomain中看到对象列表。
我正在努力争取下一位,理想情况下,我想要一个类型为AccountDomain的新列表,其中包含mainDBAccountDomain中的所有条目以及不 ManageEngineAccountDomain
任何帮助都非常感激,即使它只是指向正确的方向!
答案 0 :(得分:1)
我想要一个类型为AccountDomain的新列表,其中包含mainDBAccountDomain中的所有条目以及不 ManageEngineAccountDomain
linq对象非常简单,它正是Enumerable.Except
函数的作用:
var result = mainDBAccountDomain.Except(manageEngineAccountDomain).ToList();
如果您需要与引用相等的内容不同,可以将比较器传递给Except
函数,或者您可以在Equals
中实现GetHashCode
和AccountDomain
(并可选择实现) IEquatable<AccountDomain>
除了这些之外)。
如果您需要有关比较器的更多详细信息,请参阅this explanation。
以下是一个例子:
public class AccountDomainEqualityComparer : IEqualityComparer<AccountDomain>
{
public static readonly AccountDomainEqualityComparer Instance
= new AccountDomainEqualityComparer();
private AccountDomainEqualityComparer()
{
}
public bool Equals(AccountDomain x, AccountDomain y)
{
if (ReferenceEquals(x, y))
return true;
if (x == null || y == null)
return false;
return x.MAILDOMAIN == y.MAILDOMAIN
&& x.ORG_NAME == y.ORG_NAME;
}
public int GetHashCode(AccountDomain obj)
{
if (obj == null)
return 0;
return (obj.MAILDOMAIN ?? string.Empty).GetHashCode()
^ (397 * (obj.ORG_NAME ?? string.Empty).GetHashCode());
}
}
然后,你就这样使用它:
var result = mainDBAccountDomain.Except(manageEngineAccountDomain,
AccountDomainEqualityComparer.Instance)
.ToList();