LINQ与动态强类型

LINQ与动态强类型,linq,list,dynamic,strong-typing,Linq,List,Dynamic,Strong Typing,我试图找到一些关于LINQ的引用,其中动态添加了强类型,静态类型如示例所示: var rowColl = _data.AsEnumerable(); var json = (from r in rowColl select new { name = r.Field<string>("name"),

我试图找到一些关于LINQ的引用,其中动态添加了强类型,静态类型如示例所示:

        var rowColl = _data.AsEnumerable();
        var json = (from r in rowColl
                    select new
                    {
                        name = r.Field<string>("name"),
                        id = r.Field<int>("id"),
                    }).ToList();
var rowColl=_data.AsEnumerable();
var json=(来自rowColl中的r
选择新的
{
名称=r.字段(“名称”),
id=r.字段(“id”),
}).ToList();

现在我感兴趣的是,是否可以在运行时动态添加“name”和“id”,因为数据表“\u data”中提供了信息,我认为有一个简单的解决方案,但是在这个问题上找不到任何参考,最好尽可能避免使用“var”作为您的类型。看起来rowColl属于IEnumerable类型。如果这是真的,那么我将看看您可以在DataRow类中使用什么(请参阅)

鉴于rowColl实际上是IEnumerable。。。如果列的顺序总是相同的,那么您可以在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()扩展名。

no。编译器在编译时为您创建一个匿名类。不过,可以在运行时创建新类型。请参阅
Reflection.Emit
namespace。这不是一个简单的解决方案,我很确定我不是第一个遇到反射问题的人。Emit确实需要一些练习才能熟练掌握。绝对不适合初学者。这使它更接近与问题无关的答案