我得到了两个对象集合。使用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