我使用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像匿名类型那样工作?
我需要将哪些内容添加到StreetAddress,这样可以像使用匿名类型一样工作?
覆盖Equals和GetHashCode,基本上是这样.理想情况下,实施IEquatable<StreetAddress>,但主要是为了清楚起见.
您的查询目前被引用平等-通过唯一的类型,平等的类型表达分组.但是,当您为每个项目创建一个新实例时,没有两个键将彼此相等.