[英]Linq - Using GroupBy with my own type vs anonymous type
我有一个我想要与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();
但是这不起作用:(即我得到的数量与Ids一样多)
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();
知道为什么吗?
谢谢
您的class
必须正确覆盖Equals(object)
和GetHashCode()
。 否则两个new Params { ... }
即使看起来相同也不会“相等”。
匿名类型会自动覆盖这两种方法。
您还可以使用struct
而不是class
因为struct
使用System.ValueType
中存在的Equals(object)
和GetHashCode()
的覆盖。 如果选择struct
,请考虑使类型成为不可变 ,即将属性设置为只读(或使用private set;
)。
你必须使用类或匿名类型.Params不是class.You可以使用它。
试试这个:
var groupedList = myList.GroupBy(i => new Parameters {
CarrierId = i.CarrierId,
CustomerId = i.CustomerId
}, i => i.Id).ToArray();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.