2014-07-11 86 views
0

我有一个自定义模式是这样的:如何将数据行转换为自定义模型

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; 

该代码是好的,但我想知道是否有一个“更好”的方式。我们可以使用AsEnumarable()方法吗?

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

+2

为什么不能有值列表的机型列表,而不是模型? –

回答

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

我觉得你在添加方法的末尾丢失了一些')'。 –

+0

@TI yep,谢谢!没有Visual Studio运行:) –

+0

谢谢解决方案1对我来说没问题。 – afrikaan

相关问题