LINQ получает отличительные значения - PullRequest
0 голосов
/ 02 марта 2012

Я знаю, что есть несколько вопросов по этой теме.Тем не мение;Я не могу найти тот, который имеет прямое отношение к моей проблеме.

У меня есть 3 таблицы в БД, и ПК из этих 3 таблиц образуют составной ПК в таблице XRef.

Мне нужно бытьвозможность выбирать отдельные элементы на основе 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 () в своем запросеи некоторые другие вещи безрезультатно.

Я был бы признателен за любую помощь, которую кто-нибудь может мне дать.

Спасибо

1 Ответ

2 голосов
/ 02 марта 2012

Как насчет отличительной перегрузки, которая принимает пользовательский компаратор равенства? Примерно так:

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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...