Как сгруппировать по ссылочному типу свойства в linq?

2

У меня есть класс вроде этого:

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, его группа не корректно, даже интерфейс impelement IEquatable<Person>, но он не работает. что мне делать?

tanx для вашей помощи.

  • 6
    Какова ваша реализация .Equals () и .GetHashCode () для Person? Вы должны всегда отвергать оба, если они что-то значат для вас. Кроме того, принятие вопросов помогает мотивировать людей.
Теги:
linq

1 ответ

3
Лучший ответ

Да, Бенджамин Подшун прав. Я должен переопределить метод 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();
  }
}

Благодарю вас

Ещё вопросы

Сообщество Overcoder
Наверх
Меню