Linq Group By Multiple Columns

时间:2014-05-17 16:01:23

标签: c# linq

我对linq& amp;难以弄清楚如何写这个。

我有以下名为animalList的集合

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

我需要看每只动物和mg /孵化组合的数量:

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();

1 个答案:

答案 0 :(得分:1)

首先,您的查询无法编译。要进行编译,您必须更改

(from a in animalList).ToList()

(from a in animalList

除此之外,您通过所有属性(group a by new { a.AnimalName, a.MG,a.Hatch })对动物进行分组。这会为AnimalNameMGHatch的每个不同组合提供一个组。在您的情况下,没有具有相同名称,孵化和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()
           };

外部查询按名称对动物进行分组,内部查询查找HatchMG的不同组合。