如何将数据行转换为自定义模型

本文关键字:自定义 模型 转换 数据 | 更新日期: 2023-09-27 18:12:41

我有一个自定义模型,如下所示:

 public class VoteOptionModel
  {
    public List<int> Index { get; set; }
    public List<string> Description { get; set; }
  }

我有一个方法返回一个数据表。我想将数据库值绑定到我的自定义模型。

 var filed1= dt.AsEnumerable().Select(s => s.Field<int>("field1")).ToList();
 var field2= dt.AsEnumerable().Select(s => s.Field<string("field2")).ToList();
 VoteOptionModel model= new VoteOptionModel();
 model.Index = visindex;
 model.Description = description;

这个代码还可以,但我想知道是否有"更好"的方法。我们可以使用AsEnumarable()方法吗?

dt.AsEnumarable().Select(r=>new VoteOptionModel{Index=r["filed1"].toList()});

如何将数据行转换为自定义模型

您可以使用Enumerable在一次运行中收集所有聚合数据(确保在模型构造函数中初始化列表(。聚合:

var model = dt.AsEnumerable().Aggregate(new VoteOptionModel(),
              (model,r) => {
                model.Index.Add(r.Field<int>("field1"));
                model.Description.Add(r.Field<string>("field2"));
                return model;
             });

如果您不想更改模型的构造函数,那么可以通过以下方式初始化模型:

new VoteOptionModel() { 
      Index = new List<int>(), 
      Description = new List<string>() 
}

但我建议使用模型列表,而不是聚合模型,因此您有一对彼此密切相关的索引和描述值:

public class VoteOptionModel
{
    public int Index { get; set; }
    public string Description { get; set; }
}

这样做:

var models = dt.AsEnumerable().Select(r => new VoteOptionModel {
                 Index = r.Field<int>("field1"),
                 Description = r.Field<string>("field2")
             }).ToList();