C# 从datatable或database表生成类

C# 从datatable或database表生成类,c#,reflection,code-generation,C#,Reflection,Code Generation,我有一个项目,客户可以导入excel文件、csv或制表符分隔的文件。这个文件被加载到一个datatable中,我将其转换为一个SQLite数据库表。我确实更喜欢使用强类型对象而不是数据表,那么有没有一种方法可以轻松地使用反射将创建的数据库表转换为强类型类?更重要的是,导入到应用程序中的文件总是不同的(即不同的列),因此我无法真正硬编码任何强类型对象,它们总是必须动态生成。如果可能的话,您可以使用C#4的新的动态功能。更具体地说,是 ExpandoObject表示其成员可以 可在以下位置动态添加和

我有一个项目,客户可以导入excel文件、csv或制表符分隔的文件。这个文件被加载到一个datatable中,我将其转换为一个SQLite数据库表。我确实更喜欢使用强类型对象而不是数据表,那么有没有一种方法可以轻松地使用反射将创建的数据库表转换为强类型类?更重要的是,导入到应用程序中的文件总是不同的(即不同的列),因此我无法真正硬编码任何强类型对象,它们总是必须动态生成。

如果可能的话,您可以使用C#4的新的
动态
功能。更具体地说,是

ExpandoObject
表示其成员可以 可在以下位置动态添加和删除: 运行时

你也有

有关更多信息,请查看以下链接:


理论上,您可以使用Reflection.Emit之类的东西创建程序集,甚至可以通过生成代码文件并调用编译器将其构建到程序集中


然而,我不确定这会有什么用处。如果这些表的模式是在运行时确定的,那么在不使用反射的情况下,对这些生成类的任何使用都将无法使用您添加的这些强类型属性,而此时,您基本上是在处理一些弱类型的东西,并增加了反射的性能影响。C#4.0中的动态类型可能会消除对性能的影响,但您仍然增加了很多复杂性,却没有真正的好处。

Ryan已经提出了正确的问题,我也只能说强类型类的唯一好处是在设计或编译时,而不是在运行时

也许您希望在创建SQLlite表之后,在使用该表的另一个应用程序中构建一些强类型类

在这种情况下,您可能需要研究一下,因为它能够从查询中创建强类型类,这样您就可以在编译时为进一步的应用程序使用这些类

但在你开始使用它之前,你应该知道T4是s的一种