C# C将数据表转换为类

C# C将数据表转换为类,c#,C#,我正在尝试将Datatable转换为c类 我使用以下方法来转换 这是我作为控制台应用程序开发的。我还没有在控制台应用程序上引用实体框架 **Class1** items = dt.AsEnumerable().Select(row => new Class1 { id = row.Field<string>("id"), name = row.Field<string>("name") }).FirstOrDefaul

我正在尝试将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”

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

是否有其他方法将datatable转换为c类

我的应用程序是c语言的,VisualStudio2008控制台应用程序

**Class1**  items = dt.AsEnumerable().Select(row =>
   new Class1
   {
       id = row.Field<string>("id"),
       name = row.Field<string>("name")
   }).FirstOrDefault();
错误显示在Class1中
Console和real time project在vs 2008中

一旦您解决了引用问题,并且假设您确实希望从DataTable中的行转换为.NET类的实例,请查看

允许您执行以下操作:

// 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"]);

一旦您解决了引用问题,并假设您确实希望将DataTable中的行转换为.NET类的实例,请查看

允许您执行以下操作:

// 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"]);

我写这篇文章只是作为一个快速测试——实际上只是添加了新的控制台应用程序和以下代码:

    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.Data和System.Data.DataSetExtensions。。和System/System.Core/Microsoft.CSharp/System.Xml/System.Xml.Linq。问题不在于你发布的代码,而在于我们看不到的地方。你能发布你正在引用的DLL的完整列表吗


您绝对不需要引用System.Data.Entity.dll来执行所做的操作。在所有源文件中搜索System.Data.Objects.DataClass,以查看引用实体框架库中类的位置。它也可能是从您正在引用的库中拉入的。

我只是将此作为一个快速测试编写的-实际上只是添加新的控制台应用程序和以下代码:

    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.Data和System.Data.DataSetExtensions。。和System/System.Core/Microsoft.CSharp/System.Xml/System.Xml.Linq。问题不在于你发布的代码,而在于我们看不到的地方。你能发布你正在引用的DLL的完整列表吗


您绝对不需要引用System.Data.Entity.dll来执行所做的操作。在所有源文件中搜索System.Data.Objects.DataClass,以查看引用实体框架库中类的位置。它也可以从您正在引用的库中提取。

您的实时项目是什么?WinForms?安慰Web应用程序?错误出现在哪一行?@Shadow,c控制台vs 2008第1行中的错误两个项目都指向相同的.NET framework版本?@Despertar from quick look我认为所需的程序集是您的实时项目是什么?WinForms?安慰Web应用程序?错误出现在哪一行?@Shadow,c console vs 2008第1行中的错误两个项目指向相同的.NET framework版本?@Despertar从quick look开始我认为所需的程序集为什么不只是dt.AsEnumerable?数据集扩展就是这样做的。我不知道!整洁的虽然,OP确实说:我不想引用实体框架-数据集扩展在EF中吗?不,它们在System.Data.DataSetExtensions中。超级方便。为什么不只是dt.AsEnumerable?数据集扩展就是这样做的。我不知道!整洁的虽然,OP确实说:我不想引用实体框架-数据集扩展在EF中吗?不,它们在System.Data.DataSetExtensions中。非常方便。