繁体   English   中英

从数据表数据 C# 创建对象

[英]Create Objects from Datatable data C#

我正在创建一个 Web 服务,它需要输入参数并返回对象中的数据。 我创建了一个具有许多属性的类 Sending。

我正在从数据库中检索数据并将它们加载到数据表中。 我正在使用数据表,因为我可以有很多行,我需要为每一行创建一个发送类的对象。

我还为发送类中的每个变量创建了 get 和 set 属性。

有没有办法将数据表中的数据插入到类对象中?

如果您已经创建了匹配的数据模型,那么您可以执行以下操作

IList<YourClass> items = yourdatatable.AsEnumerable().Select(x => 
    new YourClass
        {
            field1 = x.Field<int>("idcolumnName"),
            field2 = x.Field<string>("otherColumn")
        }).ToList();

试试这个示例扩展。 根据您的要求改进它。

public static IEnumerable<T> ToIEnumerable<T>(this DataTable dt)
{
    List<T> list = Activator.CreateInstance<List<T>>();
    T instance = Activator.CreateInstance<T>();
    var prop = instance.GetType().GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance);
    foreach (DataRow dr in dt.Rows)
    {
        T ins = Activator.CreateInstance<T>();
        foreach (var p in prop)
        {
            try
            {
                p.SetValue(ins, dr[p.Name], null);
            }
            catch { }
        }
        list.Add(ins);
    }
    return list;
}

用法:

yourDataTable.ToIEnumerable<YourClassModel>();

不要尝试手动执行此操作。 ORM 以更简单的方式完成这项工作。 您实际上可以使用像Dapper.NETMassive这样的 Micro-ORM 以最少的配置从数据库加载数据作为对象。

例如,此查询 Dapper.NET 查询将加载具有指定年龄的所有 Dog 对象:

public class Dog
{
    public int? Age { get; set; }
    ...
}            

var dogs = connection.Query<Dog>("select Age = @Age", new { Age = 5 });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM