<分区>
我在 DataReader
中有数据我想将其转换为 List<T>
.
什么是可能的简单解决方案?
例如在 CustomerEntity 类中,我有 CustomerId 和 CustomerName 属性。如果我的 DataReader 将这两列作为数据返回,那么我如何将其转换为 List<CustomerEntity>
.
<分区>
我在 DataReader
中有数据我想将其转换为 List<T>
.
什么是可能的简单解决方案?
例如在 CustomerEntity 类中,我有 CustomerId 和 CustomerName 属性。如果我的 DataReader 将这两列作为数据返回,那么我如何将其转换为 List<CustomerEntity>
.
最佳答案
我建议为此编写一个扩展方法:
public static IEnumerable<T> Select<T>(this IDataReader reader,
Func<IDataReader, T> projection)
{
while (reader.Read())
{
yield return projection(reader);
}
}
然后您可以使用 LINQ 的 ToList()
将其转换为 List<T>
的方法如果你愿意,像这样:
using (IDataReader reader = ...)
{
List<Customer> customers = reader.Select(r => new Customer {
CustomerId = r["id"] is DBNull ? null : r["id"].ToString(),
CustomerName = r["name"] is DBNull ? null : r["name"].ToString()
}).ToList();
}
我实际上建议放一个 FromDataReader
Customer
中的方法(或其他地方):
public static Customer FromDataReader(IDataReader reader) { ... }
那会离开:
using (IDataReader reader = ...)
{
List<Customer> customers = reader.Select<Customer>(Customer.FromDataReader)
.ToList();
}
(我认为类型推断在这种情况下不起作用,但我可能是错的...)
关于c# - 如何轻松地将 DataReader 转换为 List<T>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1464883/