我通过逐个创建每个记录来创建流中的IEnumerable。如果Id已经存在,有没有办法检查我当前的结果,那么我不想将当前读取的记录添加到集合中。
public class Employee
{
public string Name { get; set; }
public string Country { get; set; }
public string Rank { get; set; }
public string Hours { get; set; }
public static Employee Create(IDataRecord record)
{
return new Employee
{
Name = record["name"],
Country = record["country"],
Rank = record["rank"],
Hours = record["hours"],
};
}
}
public IEnumerable<Employee> GetEmployees(TextReader stream)
{
using (var reader = MyLibraryFunction(stream)
{
while (reader.Read())
{
yield return Employee.Create(reader);
}
}
}
var result = GetEmployees(stream);
编辑:这是一个简化的例子。我实际上想知道我是否可以访问集合中的现有记录。如果它已经存在,我想简单地更新一个字段(添加小时数),如果它不存在则应该添加。
答案 0 :(得分:7)
使用所有产生的对象ID的hashset:
public IEnumerable<Employee> GetEmployees(TextReader stream)
{
var exisiting = new HashSet<int>();
using (var reader = MyLibraryFunction(stream)
{
while (reader.Read())
{
var employee = Employee.Create(reader);
if (exisiting.Add(employee.Id)) {
yield return employee;
}
}
}
}