Si vous ne voulez pas ajouter la bibliothèque MoreLinq à votre projet juste pour obtenir la DistinctByfonctionnalité, vous pouvez obtenir le même résultat final en utilisant la surcharge de la Distinctméthode de Linq qui prend un IEqualityComparerargument.
Vous commencez par créer une classe de comparaison d'égalité personnalisée générique qui utilise la syntaxe lambda pour effectuer une comparaison personnalisée de deux instances d'une classe générique:
public class CustomEqualityComparer<T> : IEqualityComparer<T>
{
    Func<T, T, bool> _comparison;
    Func<T, int> _hashCodeFactory;
    public CustomEqualityComparer(Func<T, T, bool> comparison, Func<T, int> hashCodeFactory)
    {
        _comparison = comparison;
        _hashCodeFactory = hashCodeFactory;
    }
    public bool Equals(T x, T y)
    {
        return _comparison(x, y);
    }
    public int GetHashCode(T obj)
    {
        return _hashCodeFactory(obj);
    }
}
Ensuite, dans votre code principal, vous l'utilisez comme suit:
Func<Person, Person, bool> areEqual = (p1, p2) => int.Equals(p1.Id, p2.Id);
Func<Person, int> getHashCode = (p) => p.Id.GetHashCode();
var query = people.Distinct(new CustomEqualityComparer<Person>(areEqual, getHashCode));
Voila! :)
Ce qui précède suppose ce qui suit:
- La propriété 
Person.Idest de typeint 
- La 
peoplecollection ne contient aucun élément nul 
Si la collection peut contenir des valeurs nulles, réécrivez simplement les lambdas pour vérifier la valeur null, par exemple:
Func<Person, Person, bool> areEqual = (p1, p2) => 
{
    return (p1 != null && p2 != null) ? int.Equals(p1.Id, p2.Id) : false;
};
ÉDITER
Cette approche est similaire à celle de la réponse de Vladimir Nesterovsky mais plus simple. 
Il est également similaire à celui de la réponse de Joel mais permet une logique de comparaison complexe impliquant plusieurs propriétés. 
Cependant, si vos objets ne peuvent différer que par Idun autre utilisateur, la réponse correcte est que tout ce que vous devez faire est de remplacer les implémentations par défaut de GetHashCode()et Equals()dans votre Personclasse, puis d'utiliser simplement la Distinct()méthode prête à l'emploi de Linq pour filtrer tous les doublons.