c# - LINQ 选择不同的 c#

标签 c# linq-to-sql

我正在尝试做一个不包含重复的 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();

我想要这个:

SELECT   distinct CONSULT.IdUser , CONSULT.DateCreate, 
         CONSULT.IdTypeConsult , USER.Sex
FROM   CONSULT INNER JOIN
       USER ON CONSULT.IdUser = USER.IdUser 

查询给出重复记录

为什么它不起作用?

最佳答案

我想你想使用 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();
    }
}

然后像这样使用它:

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);

我不确定这是否会生成您想要的 SQL,但很可能会得到您想要的结果。

关于c# - LINQ 选择不同的 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11673584/

相关文章:

c# - 使用 C# 在 SWF 中编辑 Sprite 变量

visual-studio - Visual Studio 预生成事件是否保证在编译开始之前完成?

linq - FirstorDefault() 导致 linq to sql 延迟加载或急切加载

c# - 尝试创建分部类时出错

c# - 服务器在 IIS6 上使用 asp.net 3.5 返回空白页

c# - 如何使用相对路径在c#中获取图像文件?

c# - UWP App 中的垂直多级导航菜单

c# - 我可以通过 SQL Server 触发器调用 C# 函数吗?

sql - 检查时间范围重叠,watchman 问题 [SQL]

c# - ASP.NET Identity 2.2.1 - 发送带有代码而不是链接的确认电子邮件