【问题标题】:LINQ getting Distinct valuesLINQ 获得不同的值
【发布时间】:2012-03-01 22:22:37
【问题描述】:

我知道关于这个主题有几个问题。然而;我找不到与我的问题直接相关的问题。

我在数据库中有 3 个表,这 3 个表中的 PK 在外部参照表中形成了一个复合 PK。

我需要能够根据其中两个键选择不同的项目,以便在报告上显示。

    public IEnumerable<AssemblyPrograms> GetProgramAssemblies()
    {
        var assembliesList = (from c in eModel.Assemblies.ToList()
                             join d in eModel.Programs_X_Assemblies_X_Builds
                             on c.AssemblyID equals d.AssemblyID
                             join p in eModel.Programs
                             on d.ProgramID equals p.ProgramID
                             join a in eModel.AssemblyTypes
                             on c.AssemblyTypeID equals a.AssemblyTypeID

                             select new AssemblyPrograms
                             {
                                 AssemblyID = c.AssemblyID
                                 ,ProgramID = d.ProgramID
                                 ,AssemblyName = c.AssemblyName
                                 ,AssemblyPrefixName = c.AssemblyPrefixName
                                 ,ProgramName = p.ProgramName
                                 ,AssemblyTypeName = a.AssemblyTypeName
                                 ,AssemblyTypeID = a.AssemblyTypeID
                             });

        return assembliesList;
    }

这是我的查询以及我需要从表格中提取的内容

在我的外部参照表中,我有 AssemblyID、ProgramID 和 BuildID 作为我的复合 PK。

从 AssemblyID 到 ProgramID 可以存在多对多关系。 BuildID 是区分它们的关键。

我需要为我的报告提取 Distinct AssemblyID 到 ProgramID 关系,可以忽略 BuildID。

我在查询中尝试了 .Distinct() 以及其他一些无济于事的方法。

如果有人能给我任何帮助,我将不胜感激。

谢谢

【问题讨论】:

    标签: sql linq linq-to-sql c#-4.0


    【解决方案1】:

    接受自定义相等比较器的 Distinct 重载怎么样?像这样的:

    class AssemblyComparer : EqualityComparer<AssemblyPrograms> {
        public override bool Equals(AssemblyPrograms x, AssemblyPrograms y) {
            return x.ProgramID == y.ProgramID && x.AssemblyID == y.AssemblyID;
        }
    
        public override int GetHashCode(AssemblyPrograms obj) {
            return obj.ProgramID.GetHashCode() ^ obj.AssemblyID.GetHashCode();
        }
    }
    

    【讨论】:

    • 这就像一个魅力。非常感谢您的快速回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    • 2021-05-31
    • 1970-01-01
    • 2021-09-26
    相关资源
    最近更新 更多