DataClasses1DataContext db = new DataClasses1DataContext(XXXXXX);   //定义DataContext
object Query;                                                       //Query有可能为任一IQueryable值,所以定义为Object
Query = db.TableA.Where(a => a.id > 5 && a.id < 10000000);          //Query的值可能性之一
也有可能,用户Query赋值为或者其它的值
Query = db.TableA.Where(a => a.code="AAAAA");                       //Query的值可能性之二,也有可能是其它的值Query有可能为任何IQueryable值
在这种情况下,有没有办法枚举出Query的所有字段?

解决方案 »

  1.   

    LZ是想枚举出所有的值还是字段??
    DataClasses1DataContext db = new DataClasses1DataContext(XXXXXX);  //定义DataContext 
    var objResult = db.TableA.Where(a => a.id > 5 && a.id < 10000000);
                    //from c in db.TableA where c.id >5 and a.id<10000000 select c; 这样也行的吧linq语句
    foreach(var item in objResult)
    {
        Console.WriteLine(item.属性);
    }是这样的吧,还是我理解LZ错了?
      

  2.   

    Query可能为任一个值,
    也就是你说的objResult可能在是不同的值,db.TableA.Where(,,,,,). 也可能是db.TableB.Where(....)
    在不知道objResult值的情况下。列出所有的字段名
      

  3.   

    你在objResult=db.TableA.Where(,,,,,). 或者objResult=db.TableB.Where(....) 不就知道objResult的值了吗?
    执行了这两个objResult就可以用foreach来取值,
    如果是前者:foreach(TableA类型 data in objResult),后者:foreach(TableB类型 data in objResult)
      

  4.   

    To:wangping_li   我是想写一个通用的方法实现这样的功能。不需要单独的针对TableA,TableB写代码,您可以看下这个
      http://topic.csdn.net/u/20081024/10/1a99ca23-c6d8-4e79-b946-f0420fcd85dc.html?seed=2054423093
      

  5.   

    你的要求通过反射应该也是可以实现的,因为实体定义以及与数据库的映射关系是通过Attribute来实现的,所以你总可以通过反射来读取这些信息以直接处理相应的字段,甚至可以得到它是否PK,允许NULL等信息。但从你的这种情况来看,似乎你是使用某种不符合LINQ设计原则的要求,以原来的SQL的方式在设计,可以考虑你的程序是否应该用其它方式实现更合理?