0

私はLinqを把握しようとしていますが、次の問題があります:

カスタム オブジェクトのリストがあり、オブジェクトごとにいくつかのプロパティがあります。次に、ID プロパティを除いてプロパティ値が異なる、同じタイプの別のリストがあります。tempListここで、2 番目のリスト ( ) にあり、最初のリスト ( ) にはないオブジェクトを追加したいと考えていますOrderList。その後、 にOrderListないオブジェクトを削除しようとしましたtempList

これは少し不必要に思えるかもしれませんが、その理由は、OrderListこれらの ID が で見つかった場合tempListOrderListプロパティ値を保持する必要があるためです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 のオブジェクトのプロパティが 2 つの行のそれぞれの後にリセットされるため、私が間違っていることがあります...

たぶん、新鮮な目で私が間違っていることを見ることができますか?

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 に答える