我有这样的自定义模型:
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()});
或某事。
答案 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();