Linq Group по нескольким столбцам

1

Я новичок в linq и не понимаю, как это записать.

У меня есть коллекция под названием animalList

AnimalName - MG - Hatch
An1        - 1  -   1
An1        - 1  -   2
An1        - 1  -   3
An2        - 2  -   4
An2        - 2  -   3

Мне нужно увидеть каждого животного и количество комбинаций мг/люка:

AnimalName - Count
An1        - 3
An2        - 2

Для каждого животного мне нужен отдельный счет, где строки MG/Hatch имеют разные значения.

Здесь запрос, с которым я работаю, но у меня все еще возникают проблемы с правильным подсчетом.

var query = (from a in animalList).ToList()
                         group a by new { a.AnimalName, a.MG,a.Hatch }
                             into grp
                             select new
                             {
                                 grp.Key.AnimalName,
                                 grp.Key.MG,
                                 grp.Key.Hatch,
                                 Quantity = grp.Count()

                             }).ToList();
Теги:
linq

1 ответ

1
Лучший ответ

Прежде всего, ваш запрос не компилируется. Чтобы скомпилировать его, вам придется изменить

(from a in animalList).ToList()

в

(from a in animalList

Помимо этого, вы группируете животных по всем свойствам (group a by new { a.AnimalName, a.MG,a.Hatch }). Это даст вам группу для каждой комбинации AnimalName, MG и Hatch. В вашем случае нет животных с тем же именем, штриховкой и MG, поэтому все записи в списке получат свою собственную группу, что приведет к тому, что grp.Count() вернется 1.

Если я правильно вас понимаю, вы можете решить это с помощью вложенного запроса.

Что-то вроде этого:

var query = from animal in animalList
            group animal by animal.AnimalName into grp
            select new 
            {
               AnimalName = grp.Key,
               Quantity = (from an in grp
                           group an by new { an.Hatch, an.MG } into combinations
                           select combinations).Count()
           };

Внешний запрос группирует животных по имени, а внутренний запрос находит разные комбинации для Hatch и MG.

  • 0
    Спасибо! Я ценю помощь и детали вашего ответа.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню