我对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();
答案 0 :(得分: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
的不同组合。