我有一个方法,它将两个列表作为参数,并通过比较它们的名称返回一个列表,其中包含两个参数共享的对象。它看起来像这样:
static List<Department> InCommon(List<Department> list_a, List<Department> list_b)
{
List<Department> a_list = new List<Department>();
var names = list_b.Select(item => item.Name);
a_list = list_a.Where(item => names.Contains(item.Name)).ToList();
return a_list;
}
我需要第二种做类似事情的方法。从list_a
中移除对象后,它应该能够返回list_b
中的对象。 list_a
减去list_b
,可以这么说。我怀疑
List<T>.Except
可能是解决方案,但我怎样才能做到这一点?
答案 0 :(得分:0)
要使用Except
,您需要实施一个IEqualityComparer<Department>
,以便根据Department
个属性对两个Name
个实例进行比较。
所以更容易的方法是:
return list_a.Where(a => list_b.All(b => a.Name != b.Name)).ToList();
这会使list_a
中Name
的所有元素与list_b
中未出现的Except
。{/ p>
对于IEqualityComparer<Department>
版本,您需要public class DepartmentByNameComparer : IEqualityComparer<Department>
{
public bool Equals(Department x, Department y)
{
return x.Name == y.Name;
}
public int GetHashCode(Department obj)
{
return obj.Name.GetHashCode();
}
}
,如下所示:
Except
然后你可以这样打电话给return list_a.Except(list_b, new DepartmentByNameComparer()).ToList();
:
http://127.0.0.1:8000/user-activation/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImdhYm8iLCJ1c2VyX2lkIjoxOSwiZW1haWwiOiJsYXRvcnJlZ2FiQGdtYWlsLmNvbSIsImV4cCI6MTQ2NDE3ODk1N30.5FDKdxKxWuOkqe3rMNE-eHwmtrlWpD7EZ-EXw0yQM3U/