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

时间:2014-07-11 12:00:13

标签: c# sql linq

我有这样的自定义模型:

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

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

 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;

该代码还可以,但我想知道是否有更好的&#34;办法。我们可以使用AsEnumarable()方法吗?

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

1 个答案:

答案 0 :(得分:1)

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

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();