var allUsers = (from u in dataSource select u).AsQueryable<User>().Select("new(Id as myId, Grade)");因为只是获取了部分属性,allUsers获取后是一个dynamic class {Id=1, Grade=2}的集合。怎么遍历这个集合?foreach(var user in allUsers)
{
    int id = user.Id; //保持,提示object类型没有Id属性
}

解决方案 »

  1.   

    XXXX.Select(u=>new {Id=u.myId,Grade=u.Grade});
      

  2.   

    foreach (dynamic user in allUsers)
    {
        int id = user.Id; //保持,提示object类型没有Id属性
    }
      

  3.   

    我发现我混淆了弱类型与动态类型。 两者有什么区别?不都是Runtime的时候才能确定具体类型吗?
      

  4.   

    我发现我混淆了弱类型与动态类型。 两者有什么区别?不都是Runtime的时候才能确定具体类型吗?
    dynamic不会在编译期对访问的成员做检查,object不是弱类型,它是所有类型的基类。使用object,只能反射,可以认为,dynamic简化了反射的写法。
      

  5.   

    ().Select("new(Id as myId, Grade)");看不懂这是什么发明创造。
      

  6.   


    貌似是dynamic linq一类的语法。
      

  7.   


    貌似是dynamic linq一类的语法。这是微软在Linq后又写了一个扩展,Linq Dynamic Query Libry. 能够通过拼接字符串的形式查询,而不仅仅局限于使用q=>q.Id形式。
      

  8.   

    我发现我混淆了弱类型与动态类型。 两者有什么区别?不都是Runtime的时候才能确定具体类型吗?
    dynamic不会在编译期对访问的成员做检查,object不是弱类型,它是所有类型的基类。使用object,只能反射,可以认为,dynamic简化了反射的写法。var 类型会在编译的时候做检查吗? 如果是的话,var user in allUsers中的user是什么类型呢?我发现并不是我定义的User类型,而是什么LinqDynamic.User类型。 这是怎么回事?谢谢。
      

  9.   

    我发现我混淆了弱类型与动态类型。 两者有什么区别?不都是Runtime的时候才能确定具体类型吗?
    dynamic不会在编译期对访问的成员做检查,object不是弱类型,它是所有类型的基类。使用object,只能反射,可以认为,dynamic简化了反射的写法。var 类型会在编译的时候做检查吗? 如果是的话,var user in allUsers中的user是什么类型呢?我发现并不是我定义的User类型,而是什么LinqDynamic.User类型。 这是怎么回事?谢谢。var会做语法检查。
    var x = new { id = 1 };
    此时x是一个匿名类型的对象,这个匿名类型是C#编译器产生的,并且在IL中就存在,也就是对于CLR来说,这个类型是确定的,和你定义一个类一样。
      

  10.   

    你可以加一行
    Response.WriteLine(user.GetType().ToString()); 看到这个类型的名字。
      

  11.   

    为什么要用Linq Dynamic Query Libry?
    既然是LinqDynamic.User类型,应该不可以直接访问成员的
    你ToArray()或ToList()试一下是不是可以转成匿名类型
    foreach(var user in allUsers.ToList())
     {
         int id = user.Id; //保持,提示object类型没有Id属性