对IEnumerable.GroupBy()中使用的类型有什么要求?

Mr.*_*Boy 2 c# linq

我使用GroupBy的是匿名类型:

var v = list.GroupBy(x => new {x.street, x.houseNumber});
var o = v.Single(x => x.Key.street == "My Street" && x.Key.houseNumber == 42);
Run Code Online (Sandbox Code Playgroud)

它运作得很好.我决定把它变成一个具体的类型:

class StreetAddress
{
 public StreetAddress(string _street,int _houseNumber){...}
 public string street{get; set;}
 public int houseNumber{get;set;}
}
var v = list.GroupBy(x => new StreetAddress(x.street, x.houseNumber));
var o = v.Single(x => x.Key == new StreetAddress("My Street", 42));
Run Code Online (Sandbox Code Playgroud)

现在'v'根本没有分组 - 具有相同Key值的项目的加载,并且o不匹配任何对象.

我需要添加什么才能StreetAddress像匿名类型那样工作?

Jon*_*eet 7

我需要将哪些内容添加到StreetAddress,这样可以像使用匿名类型一样工作?

覆盖EqualsGetHashCode,基本上是这样.理想情况下,实施IEquatable<StreetAddress>,但主要是为了清楚起见.

您的查询目前引用平等-通过唯一的类型,平等的类型表达分组.但是,当您为每个项目创建一个新实例时,没有两个键将彼此相等.