Я думаю, что написать свой собственный компаратор - это хороший подход.
Вот статья в MSDN, которая очень хорошо объясняет тему: http://support.microsoft.com/kb/320727
Причина, по которой Distinct не работает, в том, что Distinct () не имеет представления о том, как определить, есть ли равные, поэтому он использует ссылку, чтобы определить, что это тот же самый "объект". Он работает так, как будто он готов к работе. Все классы в запросе не являются одним и тем же объектом.
Написав свой собственный компаратор (это легко), вы можете указать Distinct (), как выполнить сравнение, чтобы определить, равны ли они.
Редактировать : Если не использовать Distinct, это не проблема, и ситуация не частая, первый ответ Петра Юстины - это просто и эффективно.