LINQ select distinct c#

c#, linq-to-sql

Solution

I think you want to use the `Distinct(IEqualityComparer<T>)` overload. You need to create an `IEqualityComparer` to do what you want:

class UserComparer : IEqualityComparer<UsuersViewModel >
{
    public bool Equals(UsuersViewModel  x, UsuersViewModel y)
    {
        //Check whether the compared objects reference the same data.
        if (Object.ReferenceEquals(x, y)) return true;

        //Check whether any of the compared objects is null.
        if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
            return false;

        return x.IdUser == y.IdUser;
    }

    // If Equals() returns true for a pair of objects 
    // then GetHashCode() must return the same value for these objects.

    public int GetHashCode(UsuersViewModel  user)
    {
        //Check whether the object is null
        if (Object.ReferenceEquals(user, null)) return 0;

        return user.IdUser == null ? 0 : user.IdUser.GetHashCode();
    }
}

Then use it like this:

var comparer = new UserComparer();
var sql= (from u in db.USER
          join c in db.CONSULT on u.IdUser equals c.IdUser 
          select new UsuersViewModel 
                 {  
                    IdUser = c.IdUser, 
                    DateCreate=c.DateCreate, 
                    IdTypeConsult = c.IdTypeConsult, 
                    Sex=u.Sex 
                 })
                 .Distinct(comparer);

I'm not sure if that will generate the SQL you want, but will likely get the results you want.

Problem

I'm trying to do a query that does not include repeated `IdUser` values, ​​but does not work. this is my linq query: ``` var sql= (from u in db.USER join c in db.CONSULT on u.IdUser equals c.IdUser select new UsuersViewModel { IdUser = c.IdUser, DateCreate=c.DateCreate, IdTypeConsult = c.IdTypeConsult, Sex=u.Sex }) .Distinct(); ``` I want this: ``` SELECT distinct CONSULT.IdUser , CONSULT.DateCreate, CONSULT.IdTypeConsult , USER.Sex FROM CONSULT INNER JOIN USER ON CONSULT.IdUser = USER.IdUser ``` The query give duplicated records Why doesn't it work?

Original source

Related problems