如何用单条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




