Как LINQ Distinct по нескольким полям без анонимных типов - PullRequest
7 голосов
/ 27 мая 2011

У меня есть таблица с именем CLASS с полями

    **{BATCH, DEGREE, DEPT, SEM, SECTION, GROUP }** 

У меня есть следующие записи

Запись 1: {2009, B.E, CSE, 3Sem, ASec, 1Group}

Запись 2: {2009, B.E, CSE, 3Sem, ASec, 2Group}

Запись 3: {2009, B.E, ECE, 4Sem, ASec, 1Group}

Запись 4: {2009, B.E, ECE, 4Sem, ASec, 2Group}

Мне нужно выбрать разные записи. Игнорируя GROUP и учитывая только следующие

{Пакет, градус, глубина, SEM, РАЗДЕЛ}

Так что он должен вернуть мне следующие 2 Отдельные записи

                  Record1: **{ 2009 , B.E , CSE , 3Sem , ASec , 1Group }** 

DistinctRecord: 1 ------------------------ (ИЛИ) **

                  Record2: **{ 2009 , B.E , CSE , 3Sem , ASec , 2Group }**

----- (И)

                  Record3: **{ 2009 , B.E , ECE , 4Sem , ASec , 1Group }**

DistinctRecord: 2 ------------------------ (ИЛИ)

                  Record4: **{ 2009 , B.E , ECE , 4Sem , ASec , 2Group }**

Теперь я использую следующий запрос LINQ

    public static object GetDistictClasses(IQueryable<Class> AllClasses)
    {
        return (from c in AllClasses
                group c by new { c.Batch, c.Degree_ID, c.Specialization_ID, c.CurrentSemester, c.Section_ID } into grp
                select new 
                {
                    grp.Key.Batch,
                    grp.Key.Degree_ID,
                    grp.Key.Specialization_ID,
                    grp.Key.CurrentSemester,
                    grp.Key.Section_ID
                }).Distinct();
    }

Но он возвращает мне Ananymous Type , но мне нужен фактический Тип класса

Может ли кто-нибудь помочь мне ... спасибо ..

Regrads Прадип

Ответы [ 2 ]

25 голосов
/ 27 мая 2011

Вы можете сделать следующее:

return
    from c in AllClasses
    group c by new
    {
        c.Batch, 
        c.Degree_ID, 
        c.Specialization_ID, 
        c.CurrentSemester, 
        c.Section_ID 
    } into grp
    select grp.First();

Это берет каждый первый Class из данной группы, таким образом возвращает объект Entity вместо анонимного типа.

17 голосов
/ 27 января 2014

Позволяет упростить задачу. Различаются по двум свойствам:

  • идентификатор пользователя и
  • идентификатор группы

и этовернет объект того же типа.

var distinctgroupSubscriptions = groupSubscriptions.GroupBy(item => new { item.User.Id, item.Group.GroupId }).Select(group => group.First()).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...