C#将Datatable转换为class

时间:2012-02-20 08:03:14

标签: c#

我正在尝试将Datatable转换为c#类。

我使用以下方法进行转换 这是我开发的控制台应用程序。我没有在控制台应用程序上引用实体框架。

**Class1**  items = dt.AsEnumerable().Select(row =>
   new Class1
   {
       id = row.Field<string>("id"),
       name = row.Field<string>("name")
   }).FirstOrDefault();

当我将此代码隐含在我的实时项目中时

我收到以下错误

类型'System.Data.Objects.DataClasses.IEntityWithKey'是在未引用的程序集中定义的。

我不想引用实体框架工作,在我的控制台应用程序中我没有引用任何东西。它工作得很好。为什么我在实时项目中收到此错误

还有其他方法可以将数据表转换为c#class。

我的应用程序位于c#,visual studio 2008控制台应用程序中。

Class1中显示

错误 控制台和实时项目在vs 2008中

2 个答案:

答案 0 :(得分:0)

一旦您的引用问题被整理出来,并假设您确实想要从DataTable中的行转换为.NET类的实例,请查看this blog post

让您这样做:

// create and fill table
DataTable table = new DataTable();
table.Columns.Add("Id", typeof(int));
table.Rows.Add(new object[]{1});
table.Rows.Add(new object[]{2});
table.Rows.Add(new object[]{3});

// create a wrapper around Rows
LinqList<DataRow> rows = new LinqList<DataRow>(table.Rows);

// do a simple select
IEnumerable<DataRow> selectedRows = from r in rows
       where (int)r["Id"] == 2
       select r;

// output result
foreach (DataRow row in selectedRows)
  Console.WriteLine(row["Id"]);

答案 1 :(得分:0)

我刚刚写了这个作为一个快速测试 - 只需添加新的控制台应用程序和下面的代码:

    static void Main(string[] args)
    {
        var table = new DataTable();
        table.Columns.Add("id", typeof(string));
        table.Columns.Add("name", typeof(string));

        table.Rows.Add(new object[] { 1, "test" });

        var item = table.AsEnumerable().Select(row =>
           new  {
               id = row.Field<string>("id"),
               name = row.Field<string>("name")
           }).First();

        Console.WriteLine(item.name);
    }

我只引用System.DataSystem.Data.DataSetExtensions(嗯..和System / System.Core / Microsoft.CSharp / System.Xml / {{ 1}})。问题不在于您发布的代码,它位于我们看不到的地方。您可以发布您正在引用的DLL的完整列表。

您绝对不需要引用System.Xml.Linq来做您正在做的事情。搜索System.Data.Entity.dll的所有源文件,以查看您在Entity Framework库中引用类的位置。它也可能从您引用的库中拉入。