如何将Datatable转换为IList C#

时间:2012-10-25 04:56:02

标签: asp.net-mvc datatable converter ilist ext.net

当我构建项目时,它有这样的错误:

  应用程序中的服务器错误。

     

传递到字典中的模型项是类型的   'System.Data.DataTable',但是这个字典需要一个模型项   输入'System.Collections.Generic.IList`1 [TLayout.Models.DemoTable]'。

这是我的控制器

public ActionResult Index()
        {
            var dm = new DemoTable();
            string connstring = "Server=localhost;Port=5432;User Id=postgres;Password=123456;Database=test";
            NpgsqlConnection conn = new NpgsqlConnection(connstring);
            conn.Open();
            string sql = "select * from demo";
            NpgsqlDataAdapter da = new NpgsqlDataAdapter(sql, conn);
            ds.Reset();
            da.Fill(ds);
            dt = ds.Tables[0];
            var demoid = dm.demoid.ToString();
            var demoname = dm.demoname;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                List<DataTable> dtb = new List<DataTable>();
                demoid = dt.Rows[i]["demoid"].ToString();
                demoname = dt.Rows[i]["demoname"].ToString();
                dtb.Add(dt);
            }
            return View(dt);
        }

这是我的视图,用于向布局显示数据:

foreach (var item in Model)
{
    fields.Add(Html.X().ModelField().Mapping(@item.demoid.ToString()).Name("grid-alarm"));
    fields.Add(Html.X().ModelField().Mapping(@item.demoname.ToString()).Name("grid-check"));
}

1 个答案:

答案 0 :(得分:1)

var list = dt.AsEnumerable()
             .Where(row => (int)row["demoid"] > 5)
             .Select(row => new
              {
                 demoid = Convert.ToInt32(row["demoid"]),
                 demoname = row["demoname"] != null ? 
                            row["demoname"].ToString() : 
                            String.Empty
              }).ToList();

或者您可以定义类:

public class myClass
{
  public int demoid;
  public string demoname;
}

然后:

List<myClass> list = dt.AsEnumerable()
             .Where(row => (int)row["demoid"] > 5)
             .Select(row => new myClass
             {
                 demoid = Convert.ToInt32(row["demoid"]),
                 demoname = row["demoname"] != null ? 
                            row["demoname"].ToString() : 
                            String.Empty
             }).ToList<myClass>();