c# - 使用 LINQ 获取两个比较列表的结果并根据结果更改列表中的属性
问题描述
我有两个对象列表,假设第一个称为部门,第二个称为学生。
public class Student {
public int Id {get; set; }
public string Name {get; set; }
public bool IsActive {get; set; }
public int DepId {get;set;}
}
public class Department {
public int DepId {get; set; }
public string DepName {get; set; }
}
备注:用户列表中充满了许多对象(超过 150 000 个项目)。
出于这个原因,我使用了Task.Run()
private async Task UpdateMyGrid()
{
departments = ....; // list of departments
students = ..... ; // list of students
await Task.Run(() =>
{
var results = students.Where(x => departments.Any(y => y.DepId== x.DepId));
foreach (var s in students)
{
if (results.ToList().Exists(p => p.DepId== s.DepId))
{
s.IsEnabled = false;
}
}
GridViewStudent.ItemsSource = null;
GridViewStudent.ItemsSource = students;
});
}
我想比较两个用户和部门列表并获得它们之间的结果,然后将属性设置IsActive
为 false 。
例子 :
List students: {1,"John",True,001} , {2,"Mariah",True,003},{3,"Karima",True,002},{4,"Jenny",True,004}
List departments: {001,"Science"} , {002,"Culture"}
预期结果:
Results will be => {1,"John",True,001},{3,"Karima",True,002}
Students will be => {1,"John",False,001} , {2,"Mariah",True,003},
{3,"Karima",False,002},{4,"Jenny",True,004}
我该怎么做才能使上述代码有效?
解决方案
我认为您想提高性能。为此,您可以使用 Parallel.For 而不是 foreach 循环,因为您有很多对象。
Parallel.ForEach(students, s =>
{
if (results.ToList().Exists(p => p.DepId== s.DepId))
{
s.IsActive = false;
}
});
它在 System.Threading.Tasks 中可用;
推荐阅读
- reactjs - 反应:捕获失败的导入
- google-apps-script - Arrayformula 无法识别单元格中的日期
- javascript - react-native 错误:日期的值不能从字符串转换为双精度
- javascript - 用于字符串中部分匹配的 JavaScript
- javascript - 如何使用 Ramda 计算数组中的重复项?
- bash - BASH 语法错误 nc -vvv 192.168.190.130 80 GET / bash: 意外标记 `(' 附近的语法错误
- c++ - 读取一系列正数并打印它们的二进制表示
- html - 将一个块替换为另一个块
- batch-file - 删除配置文件名称末尾带有 0 的所有用户
- javascript - 如何选择特定选项?