鉴于以下课程
public class Foo
{
public int FooId { get; set; }
public string FooName { get; set; }
public override bool Equals(object obj)
{
Foo fooItem = obj as Foo;
if (fooItem == null)
{
return false;
}
return fooItem.FooId == this.FooId;
}
public override int GetHashCode()
{
// Which is preferred?
return base.GetHashCode();
//return this.FooId.GetHashCode();
}
}
Run Code Online (Sandbox Code Playgroud)
我已经覆盖了该Equals方法,因为它Foo代表了Foos表的一行.哪个是覆盖的首选方法GetHashCode?
覆盖为什么重要GetHashCode?
我列出了人员的姓名和名字,以及人员姓名和姓氏的清单.有些人没有名字,有些人没有姓氏; 我想在两个列表上进行完全外连接.
所以以下列表:
ID FirstName
-- ---------
1 John
2 Sue
ID LastName
-- --------
1 Doe
3 Smith
Run Code Online (Sandbox Code Playgroud)
应该产生:
ID FirstName LastName
-- --------- --------
1 John Doe
2 Sue
3 Smith
Run Code Online (Sandbox Code Playgroud)
我是LINQ的新手(如果我是跛脚的话,请原谅我)并找到了很多"LINQ Outer Joins"的解决方案,这些解决方案看起来非常相似,但实际上似乎是留下了外部联接.
到目前为止,我的尝试是这样的:
private void OuterJoinTest()
{
List<FirstName> firstNames = new List<FirstName>();
firstNames.Add(new FirstName { ID = 1, Name = "John" });
firstNames.Add(new FirstName { ID = 2, Name = "Sue" });
List<LastName> lastNames = new List<LastName>();
lastNames.Add(new LastName { ID = 1, Name = "Doe" …Run Code Online (Sandbox Code Playgroud) 我有两个List<T>对象:
例如:
清单1:
ID,填充了Id的值,值为空,它包含1到10的说法ID.1
,""
2,""
......
10,""
列表2:
ID,值和其他属性都填充了值,但此列表在ID方面是列表1的子集.(例如只有3项)
2,67
4,90
5,98
我想要的是合并列表1,但具有更新的值.有没有人有任何好的扩展方法可以执行此操作或执行此操作的任何elegent代码.最终的清单应该是:
ID,值
1,""
2,67 //值列表2
3,""
4,90
5,98
6,""
......
10,""