Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq多列分组_C#_Linq - Fatal编程技术网

C# Linq多列分组

C# Linq多列分组,c#,linq,C#,Linq,我是linq的新手&我不知道如何写这个 我有一个叫animalList的收藏 AnimalName - MG - Hatch An1 - 1 - 1 An1 - 1 - 2 An1 - 1 - 3 An2 - 2 - 4 An2 - 2 - 3 我需要查看每只动物和mg/hatch组合的数量: AnimalName - Count An1 - 3 An2 - 2 对

我是linq的新手&我不知道如何写这个

我有一个叫animalList的收藏

AnimalName - MG - Hatch
An1        - 1  -   1
An1        - 1  -   2
An1        - 1  -   3
An2        - 2  -   4
An2        - 2  -   3
我需要查看每只动物和mg/hatch组合的数量:

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

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

(from a in animalList).ToList()

除此之外,您还根据所有属性对动物进行分组(
根据新的{a.AnimalName,a.MG,a.Hatch}
)。这将为
AnimalName
MG
Hatch
的每个不同组合提供一个组。在您的例子中,没有具有相同名称、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

的不同组合。我在获取正确的计数时仍有问题。-详细说明“问题”。谢谢!我感谢你的帮助和详细的回答。
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()
           };