我知道有关此主题的几个问题。然而;我找不到与我的问题直接相关的那个。
我在数据库中有3个表,而这3个表中的PK在XRef表中组成了一个复合PK。
我需要能够根据2个键选择不同的项目,以便在报告上显示。
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;
}
这是我的查询以及我需要从表格中取出的内容
在我的XRef表中,我将AssemblyID,ProgramID和BuildID作为我的复合PK。
从AssemblyID到ProgramID之间可能有很多关系。 BuildID是分隔它们的关键。
我需要将Distinct AssemblyID拉到我的报告的ProgramID关系,可以忽略BuildID。
我在我的查询中尝试过.Distinct()以及其他一些无用的东西。
我很感激任何人都可以给我的帮助。
由于
答案 0 :(得分:2)
接受自定义相等比较器的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();
}
}