我有这两个列表 result
和 resultNew
:
data.AddMapping<Employee>(x => x.Name, "Name");
data.AddMapping<Employee>(x => x.Code, "Code");
data.AddMapping<Employee>(x => x.WorkingStatus, "Working Status");
var result = (from x in data.Worksheet<Employee>("Tradesmen")
select x).ToList();
dataNew.AddMapping<Employee>(x => x.Name, "Name");
dataNew.AddMapping<Employee>(x => x.Code, "Code");
dataNew.AddMapping<Employee>(x => x.WorkingStatus, "Working Status");
var resultNew = (from x in dataNew.Worksheet<Employee>("On Leave")
select x).ToList();
其中 Employee
是一个简单的 c# 代码,包含 code
、name
和 workingStatus
字段
我想获取 code
是 resultNew
而不是 result
的数据
我试过这个:
var newEmployees = resultNew.Except(Code = result.Select(s => s.Code)).ToList();
但是我遇到了语法错误:
System.Collections.Generic.List' does not contain a definition for 'Except' and the best extension method overload 'System.Linq.Enumerable.Except(System.Collections.Generic.IEnumerable, System.Collections.Generic.IEnumerable)' has some invalid arguments
最佳答案
您可以为新员工的代码创建一个HashSet
,然后像这样使用它:
HashSet<string> resultCodes = new HashSet<string>(result.Select(r => r.Code));
List<Employee> newEmployees = resultNew.Where(r => !resultCodes.Contains(r.Code))
.ToList();
您还可以根据属性 Code
为您的类 Employee 覆盖 Equals
和 GetHashCode
,然后您可以使用 Except
喜欢:
class Employee
{
protected bool Equals(Employee other)
{
return string.Equals(Code, other.Code);
}
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != this.GetType()) return false;
return Equals((Employee) obj);
}
public override int GetHashCode()
{
return (Code != null ? Code.GetHashCode() : 0);
}
public string Name { get; set; }
public string Code { get; set; }
public string WorkingStatus { get; set; }
}
然后:
var newEmployees = resultnew.Except(result).ToList();
请记住,Equals
和 GetHashCode
的上述实现只考虑了 Code
属性。看这个问题How do you implement GetHashCode for structure with two string, when both strings are interchangeable
关于c# 用对象区分两个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25691023/