C# Linq多列分组
我是linq的新手&我不知道如何写这个 我有一个叫animalList的收藏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 对
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()
};