从两个对象列表中选择对象

时间:2016-05-25 13:34:40

标签: c# linq

我有一个方法,它将两个列表作为参数,并通过比较它们的名称返回一个列表,其中包含两个参数共享的对象。它看起来像这样:

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

可能是解决方案,但我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

要使用Except,您需要实施一个IEqualityComparer<Department>,以便根据Department个属性对两个Name个实例进行比较。

所以更容易的方法是:

return list_a.Where(a => list_b.All(b => a.Name != b.Name)).ToList();

这会使list_aName的所有元素与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/