You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用单条LINQ语句实现ID列表与Person表交集并求和年龄?

解决方案:用单条LINQ语句实现ID交集并求和年龄

没问题,我来帮你搞定这个需求!你其实不需要先单独获取交集再求和,直接通过过滤+求和的组合LINQ操作就能一步到位,而且代码更简洁高效。

核心思路

先从Person集合中筛选出PersonId存在于目标ID数组中的记录,然后直接对这些记录的Age属性求和即可,全程不需要foreach循环。

代码示例

假设你的Person集合是List<Person>类型(对应数据库中的Person表),代码如下:

// 你的目标ID数组
string[] ids = { "AF1", "AF2", "AF3" };

// 单条LINQ语句完成筛选+求和
int totalAge = persons.Where(person => ids.Contains(person.PersonId)).Sum(person => person.Age);

// 输出结果:100
Console.WriteLine(totalAge);

补充:用Intersect的实现方式(可选)

如果你坚持要先用Intersect获取匹配的ID,也可以这样写(不过效率略低于上面的方式,因为需要遍历两次Person集合):

string[] ids = { "AF1", "AF2", "AF3" };

// 先获取Person表与目标ID的交集
var matchingPersonIds = persons.Select(p => p.PersonId).Intersect(ids);

// 根据交集ID筛选并求和
int totalAge = persons.Where(p => matchingPersonIds.Contains(p.PersonId)).Sum(p => p.Age);

结果验证

筛选出的Person记录是AF1(20)、AF2(50)、AF3(30),求和后正好是20+50+30=100,完全符合你的期望。

内容的提问来源于stack exchange,提问作者Luís Tiago

火山引擎 最新活动