我有一个对象列表,想要用Linq进行分组。这些对象的类型是GroupRating。我想按照它们的“Params”属性进行分组。
public class GroupRating
{
public long Id { get; set; }
public Parameters Params { get; set; }
}
public class Parameters
{
public int CarrierId { get; set; }
public int CustomerId { get; set; }
}
事实上,这是有效的: (即,我只得到一个包含所有id的组)
var myList = new List<GroupRating>();
... blahblah code...
var groupedList = myList.GroupBy(i => new {
CarrierId = i.Params.CarrierId,
CustomerId = i.Params.CustomerId
}, i => i.Id).ToArray();
但这并不起作用: (即我得到与Id数量相同的组)
var myList = new List<GroupRating>();
... blahblah code...
var groupedList = myList.GroupBy(i => new Params {
CarrierId = i.Params.CarrierId,
CustomerId = i.Params.CustomerId
}, i => i.Id).ToArray();
有任何想法为什么呢?
谢谢。
Equals
和GetHashCode
方法远非最佳选择,因此即使使用结构体,我建议重写它们;B. 即使在类中,如果可能的话,始终值得考虑不可变性。 - Jon Hannaint
类型的情况下,ValueType
的实现会有多低效呢?)。 - Jeppe Stig Nielsen