我正在尝试执行不包含重复IdUser值的查询,但不起作用.
这是我的linq查询:
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();
Run Code Online (Sandbox Code Playgroud)
我要这个:
SELECT distinct CONSULT.IdUser , CONSULT.DateCreate,
CONSULT.IdTypeConsult , USER.Sex
FROM CONSULT INNER JOIN
USER ON CONSULT.IdUser = USER.IdUser
Run Code Online (Sandbox Code Playgroud)
该查询提供重复的记录
为什么不起作用?
我想你想要使用Distinct(IEqualityComparer<T>)过载.你需要创建一个IEqualityComparer你想做的事情:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它:
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);
Run Code Online (Sandbox Code Playgroud)
我不确定这是否会生成您想要的SQL,但可能会得到您想要的结果.
| 归档时间: |
|
| 查看次数: |
32081 次 |
| 最近记录: |