2010-02-20 3 views
2

J'ai une classe comme ceci:Comment faire pour se regrouper sur une propriété de type référence dans linq?

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

Je writed une requête dans LINQ comme ceci:

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

Il fonctionne correctement. Mais je vais regrouper sur l'objet SalesPerson pas sur SalesPersonId. Quand je grouper par SalesPerson son groupe n'est pas correct même si j'implante l'interface IEquatable<Person> mais ça ne marche pas encore. que devrais-je faire?

tanx pour votre aide.

+6

Quelle est votre Equals() et .GetHashCode() la mise en œuvre sur la personne? Vous devriez toujours remplacer les deux si elles signifient quelque chose pour vous. En outre, accepter des questions aide à motiver les gens. –

Répondre

3

oh oui, Benjamin Podszun a raison. Je devrais surcharger la méthode GetHashCode() aussi. donc ma classe est comme ceci:

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

merci

Questions connexes