在ASP.NET Core 2.0中,将DataTable
转换为IEnumerable<T>
是一个常见的需求,通常用于将数据库查询结果转换为强类型的集合。以下是实现这一转换的基础概念、优势、类型、应用场景以及可能遇到的问题和解决方法。
IEnumerable<T>
可以提供更好的类型安全性,减少运行时错误。DataTable
中的每一行转换为T
类型的对象。System.Linq.Dynamic.Core
或Dapper
等库可以简化这一过程。以下是一个手动转换的示例代码:
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
public static class DataTableExtensions
{
public static IEnumerable<T> ToEnumerable<T>(this DataTable table) where T : new()
{
var columns = table.Columns.Cast<DataColumn>().Select(c => c.ColumnName).ToArray();
var properties = typeof(T).GetProperties();
foreach (DataRow row in table.Rows)
{
var obj = new T();
foreach (var property in properties)
{
if (columns.Contains(property.Name))
{
property.SetValue(obj, Convert.ChangeType(row[property.Name], property.PropertyType));
}
}
yield return obj;
}
}
}
// 使用示例
public void ExampleMethod()
{
DataTable dataTable = new DataTable();
dataTable.Columns.Add("Id", typeof(int));
dataTable.Columns.Add("Name", typeof(string));
dataTable.Columns.Add("Age", typeof(int));
dataTable.Rows.Add(1, "Alice", 30);
dataTable.Rows.Add(2, "Bob", 25);
var users = dataTable.ToEnumerable<User>().ToList();
foreach (var user in users)
{
Console.WriteLine($"Id: {user.Id}, Name: {user.Name}, Age: {user.Age}");
}
}
DataTable
中的列名与目标类的属性名匹配。Convert.ChangeType
时,确保数据类型兼容。NullReferenceException
。通过上述方法,你可以将DataTable
转换为IEnumerable<T>
,并在ASP.NET Core 2.0中进行进一步处理和使用。
没有搜到相关的沙龙
领取专属 10元无门槛券
手把手带您无忧上云