我有一个要用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();
但这行不通:(即,我得到尽可能多的组有身份证)
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();
知道为什么吗?
谢谢
2条答案
按热度按时间nfs0ujit1#
您的
class
必须正确覆盖Equals(object)
和GetHashCode()
。否则,两个new Params { ... }
即使看起来相同也不会“相等”。匿名类型自动重写这两个方法。
您也可以使用
struct
代替class
,因为struct
使用System.ValueType
中存在的Equals(object)
和GetHashCode()
的重写。如果您选择struct
,请考虑将类型 * 设置为不可变 *,即将属性设置为只读(或使用private set;
)。7fhtutme2#
必须使用类或匿名类型。参数不是类。可以使用它。
试试这个: