我得到了兩個對象集合。使用LINQ合併集合,同時覆蓋具有相同ID的行
例如:
List<Foo> firstFoos = new List<Foo>();
List<Foo> secondFoos = new List<Foo>();
firstFoos.Add(new Foo() { Id = 1, ValueA = 10, ValueB = 15 });
firstFoos.Add(new Foo() { Id = 2, ValueA = 20, ValueB = 25 });
firstFoos.Add(new Foo() { Id = 3, ValueA = 30, ValueB = 35 });
firstFoos.Add(new Foo() { Id = 4, ValueA = 40, ValueB = 45 });
secondFoos.Add(new Foo() { Id = 1, ValueA = 100, ValueB = 150 });
secondFoos.Add(new Foo() { Id = 2, ValueA = 200, ValueB = 250 });
使用LINQ,我怎麼能合併這兩個集合覆蓋由secondFoos
具有相同ID firstFoos
?
預期的結果是:
| Id | ValueA | ValueB |
|---------|--------|--------|
| 1 | 100 | 150 |
| 2 | 200 | 250 |
| 3 | 30 | 35 |
| 4 | 40 | 45 |
請注意,這個例子情況下只有兩個值的列(ValueA
和ValueB
),但實際情況可能有更多。
這是保證從secondFoos返回元素時,都存在?另外,你的GetHashCode方法需要返回obj.Id(或者只與id相關的哈希)。 – Random832 2012-03-22 19:22:39
@ Random832:這就是當前對象的Linq是如何工作的 - 正如文檔中指定的那樣**聯合會按照該順序枚舉第一個和第二個,併產生每個尚未產生的元素**和是 - hashcode僅在「 Id'屬性,因爲這是唯一與此比較器相關的屬性。 – BrokenGlass 2012-03-22 19:29:55
我可以發誓,當我看到它時,它只有obj.GetHashCode。我看到了這個陳述,但是不能確定它暗示它不能從第二個集合[firstFoos]中得到第一個集合的order_中的對象。我認爲這個問題對我來說是不足以確定「每個元素」意味着什麼是非默認的等價關係。我不懷疑它目前的工作方式,規範保證它始終會保持不變。 – Random832 2012-03-23 05:39:03