0

我试图掌握Linq并遇到以下问题:

我有一个自定义对象的列表,每个对象都有一些属性。然后我有另一个相同类型的列表,其中属性值将不同,除了 ID 属性。现在,我想添加在我的第二个列表 ( tempList) 中找到但在我的第一个列表 ( OrderList) 中找不到的对象。之后,我尝试删除OrderListtempList.

这似乎有点不必要,但原因是OrderList如果在 中找到这些属性的 ID ,我需要保留属性的值tempList,因此不要用 .中OrderList的“”属性替换中的对象tempList

代码片段看起来像这样(OrderList并且tempList已经填充了对象,它是我用作标识符的属性ID ):

// Add new orders from account to current object
OrderList.AddRange(tempList.Where(p => !OrderList.Any(p2 => p2.ID == p.ID)));

// Remove missing orders from our OrderList
OrderList.RemoveAll(p => !tempList.Any(p2 => p2.ID == p.ID));

由于 OrderList 中对象的属性在两行中的每一行之后都被重置,因此我做错了一些事情......

也许一双新的眼睛可以看到我做错了什么?

4

1 回答 1

0

尝试这个:

void Main()
{
    var orList = new List<A> {new A {Id = 0, S = "a"}, new A {Id = 1, S = "b"}, new A {Id = 2, S = "c"}, new A {Id = 4, S = "e"}};
    var tmList = new List<A> {new A {Id = 2, S = "cc"}, new A {Id = 3, S = "dd"}};

    var result = orList.Union(tmList, new AComparer()).ToList();
    result.RemoveAll(a => tmList.All(at => at.Id != a.Id));
}

public class A {
    public int Id;
    public string S;
}

class AComparer : IEqualityComparer<A> {
    public bool Equals(A x, A y) { return x.Id == y.Id; }
    public int GetHashCode(A a) { return a.Id; }
}
于 2013-02-26T05:56:02.303 回答