2013-10-08 58 views
2

我试着去发现LINQ一些参考资料与动态加强类型,静态我为例子:LINQ和动态强类型

 var rowColl = _data.AsEnumerable(); 
     var json = (from r in rowColl 
        select new 
        { 
         name = r.Field<string>("name"), 
         id = r.Field<int>("id"), 
        }).ToList(); 

现在,我很感兴趣,如果可能做出“名”和“ID”动态添加在运行时,因为信息是可用的DataTable“_data”,我认为有一个简单的解决方案,但无法找到任何这方面的参考

+0

没有。编译器会在编译时为您创建一个匿名类。尽管可以在运行时创建新类型。请参阅'Reflection.Emit'命名空间。 – sircodesalot

+0

和一个不简单的解决方案,我非常肯定,我不是第一个有这个问题的人 –

+0

'Reflection.Emit'确实需要一些练习才能掌握。决定不适合初学者。 – sircodesalot

回答

0

最好避免使用“var”尽可能的你的类型。它看起来像rowColl类型IEnumerable <DataRow>。如果这是真的,那么我会看看你可以在DataRow类中使用什么(请参阅msdn documentation)。

鉴于rowColl实际上是IEnumerable <DataRow> ...如果列总是按照相同的顺序,那么你可以在你的select语句中做一些像r [0]和r [1]即

var json = (from r in rowColl 
      select new 
      { 
       name = r[0], // Where 0 is the index of the "name" column 
       id = r[1], 
      }).ToList(); 

如果抱怨你的类型安全,那么你可以使用int.Parse()将字符串转换为int并使用您列的ToString()扩展来代替。

+0

不是与问题有关 –