2010-02-20 39 views
2

我有这样一个类:如何根据linq中的引用类型属性进行分组?

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

我所著这样在LINQ查询:

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

它正常工作。但是,我将SalesPerson对象分组在SalesPersonId上。当我通过SalesPerson对其非正确组进行分组时,即使我推动了IEquatable<Person>接口,但它仍然不起作用。我该怎么办?

tanx为您提供帮助。

+6

什么是你.Equals()和.GetHashCode()实现上的人吗?如果他们对你意味着什么,你应该总是重写。另外 - 接受问题有助于激励人们。 – 2010-02-20 08:38:23

回答

3

哦,是的,本杰明Podszun是正确的。我也应该重写GetHashCode()方法。 所以我的课是这样的:

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(); 
    } 
} 

谢谢

相关问题