首页 > 解决方案 > LinQ 查询,计算另一个对象列表中的对象列表中的元素数量

问题描述

我有这种结构:

首先,有一个家庭列表。

编辑:每个家庭都包含一组人

编辑:每个人都由性别定义

我必须计算这些人中有多少是男性,有多少是女性,所以这是我尝试的:

int boys = ListOfFams.Where(f => f.persons.Where(p => p.gender == gender.male)).Count();

似乎我不能只询问男性或女性的数量,因为我需要一个条件放在第一个“哪里”之后,但是,我不知道我应该如何构建我的请求。

你们有什么想法吗?

感谢您的时间

再次编辑:谢谢大家的回答,对于关于人群等问题的后期编辑,我们深表歉意。

标签: c#linq

解决方案


您可以简单地使用 LINQCount()Sum()实现:

int boy = ListOfFams.Sum(f => f.persons.Count(p => p.gender == gender.male));

这计算了每个家庭的男性人数并总结了结果。


如果您希望这些集合中的任何一个包含null值,则需要像这样防止这种情况:

int boy = ListOfFams.Sum(f => f?.persons?.Count(p => p?.gender == gender.male) ?? 0);

现在,这仅计算非男性和非男性的人,以及非男性且其列表非null的家庭的人。 如果一个家庭或一个集合是,他们被算作。nullpersonsnull
personsnull0


推荐阅读