我正在尝试将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中
答案 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.Data
和System.Data.DataSetExtensions
(嗯..和System
/ System.Core
/ Microsoft.CSharp
/ System.Xml
/ {{ 1}})。问题不在于您发布的代码,它位于我们看不到的地方。您可以发布您正在引用的DLL的完整列表。
您绝对不需要引用System.Xml.Linq
来做您正在做的事情。搜索System.Data.Entity.dll
的所有源文件,以查看您在Entity Framework库中引用类的位置。它也可能从您引用的库中拉入。