繁体   English   中英

Linq - 使用我自己的类型与匿名类型的GroupBy

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM