C# Linq使用动态变量名选择新建

C# Linq使用动态变量名选择新建,c#,json,linq,serialization,datatable,C#,Json,Linq,Serialization,Datatable,我想为Linq集合创建一个通用数据表 我是一个乞丐,所以如果不可能,请让我知道 public void Something(DataTable dt) { var data = from row in dt.AsEnumerable() select new { Order = row["Order"].ToString(), Somethin

我想为Linq集合创建一个通用数据表 我是一个乞丐,所以如果不可能,请让我知道

public void Something(DataTable dt)
{
    var data = from row in dt.AsEnumerable()
               select new { 
                            Order = row["Order"].ToString(), 
                            Something = row["Something"].ToString(),
                            Customer = row["Customer"].ToString(),
                            Address = row["Address"].ToString()
                          };
}
这是一个表的代码 我想要这样的东西:

    public static void convertDatatable(DataTable dt)
    {
        var results = from myRow in dt.AsEnumerable()
                      select new
                      {
                          foreach(DataColumn column in dt.Columns)
                              column.ColumnName // linq Variable name
                                  = myRow[column.ColumnName];// linq Variable Value
                      };
    }
我知道我是怎么写的,但还有别的方法吗


注意:我这样做的原因是因为我无法将Datatable直接转换为JSON,它会将其序列化为XMl,然后将其作为包含该XMl的字符串发送。

如果您想继续使用datatables,那么还有一个SO:,它链接到

我强烈建议您考虑离开DataTables和DATAROW,而不是用ORM(如实体框架或LINQ到SQL)代替ORM——还有其他一些,但因为您是初学者,所以提供最简单的学习曲线;不仅仅是因为VisualStudio中对设计器的全面支持

对于.Net提供的标准JSON序列化形式,例如WCFs DataContractSerializer或Asp.Net JSON序列化程序,则需要具体类型。ORM解决方案将在设计时创建所有表包装器类型,为数据库中的每个表提供一个具体的类型

至于您在上面特别概述的想法,实现起来非常困难,因为在第一个示例中,编译器动态生成一个类型,其成员与您使用的表达式的名称和类型匹配。如果您在中打开编译后的代码并切换到IL而不是C,您就会明白我的意思

因此,要动态地复制它,您需要动态地发出一个类,可能使用,做同样的事情;然后使用类的静态工厂方法动态地发出表达式树来填充它;最后编译并执行它


如果我真的不能用其他方法来做的话,我只会考虑这样做——我更可能只编写一个例程来迭代每一列,然后将JSON写入StringBuilder并返回它!但是,如果我可以使用ORM,那么我会改为使用。

可能重复@Ani-这不是重复-之所以问这个问题是因为他想进行JSON序列化,而动态对象在这方面没有帮助。可能重复我很抱歉,但要么你忘了初学者是怎样的,要么我太初学了,我在你的回答中迷失了方向,我觉得如果其他人读了它,他们会达到他们的目标,但我只是迷路了,我见过返回JSON的实体框架查询,但由于我是初学者,不知道如何使用EFW,datatable可以转换为实体框架吗?学习实体框架并使用它重新设计我的Web服务对我来说太过分了,我甚至不知道从哪里开始使用u链接的类,如果你能详细说明的话,谢谢。P.S.:速度是个问题当我说速度是个问题时,我的意思是我运行代码到JSON的时间很重要,我不是想催你,我已经重新编写了我的代码来使用JSON.NET库,但是在转换大型文件时,它比内置的序列化程序要慢datatable@Shereef-你好-我明白你的意思,但不幸的是,完全按照您的要求去做确实是一件复杂的事情,而且可能是初学者不应该尝试的事情,我个人会回避它,因为它很复杂,而且我对生成动态代码和表达式树很在行!如果您使用EF或L2S,您就不再使用数据表了——所有的表都封装在强类型类中,这使它变得容易得多。我推荐EF快速入门-它会教你很多东西。