如何在LINQ引用类型属性组通过? [英] How to group by on a reference type property in linq?

查看:136
本文介绍了如何在LINQ引用类型属性组通过?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这样一个类:

public class Order
{
  public int Id;
  public Person SalesPerson;
  ...
}
public class Person
{
  public int Id;
  public string Name;
  ...
}



我所著的查询在LINQ是这样的:

I writed a query in LINQ like this:

Order[] orders = GetAllOrders();
var myResult = select o from orders
               group o by o.SalesPerson.Id into oGroup
               select new {SalesPersonId = oGroup.Key, Order = oGroup}

这正常工作。但我会在业务员组对象不SalesPersonId。当我按业务员它不是正确组连我教学贯彻 IEquatable<&人GT; 接口,但它不仍然工作。我该怎么办?

It work correctly. But I will group on SalesPerson object not on SalesPersonId. When I group by SalesPerson its not group correctly even I impelement IEquatable<Person> interface but it doesn't work still. what should I do?

坦对您有所帮助。

推荐答案

哦,是的,本杰明Podszun是对的。我应该重写的GetHashCode()方法了。
,所以我的班是这样的:

oh yes, Benjamin Podszun is right. I should override GetHashCode() method too. so my class is like this:

public class Person : IEquatable<Person>
{ 
  public int Id; 
  public string Name; 
  ... 

  public bool Equals(Person other)
  {
    return other == null ? false : this.Id == other.Id;
  }
  public override int GetHashCode()
  {
    return this.Id.GetHashCode();
  }
}

感谢您

这篇关于如何在LINQ引用类型属性组通过?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆