有没有办法在不使用Reflection的情况下知道IQueryable对象的内容?

时间:2013-03-27 04:31:03

标签: c# reflection dataset iqueryable

我必须使用给定的类"QueryGenerator",该类由用户使用StringConnection和Provider从选定的表和列生成动态查询。无论如何,我不必知道班级的实施,但我必须使用它而且我有库存。

最后,"QueryGenerator"将结果查询作为对象返回,我知道的唯一事情(因为我在类上使用Reflector)是我可以对该查询结果进行IQueryable强制转换。这是一个例子:

var result = (IQueryable)myQueryGenerator.Result;

要了解result的内容,我必须使用反射。

那么,是否有更好的方法可以找到result的内容,例如,用它填充DataSet?

1 个答案:

答案 0 :(得分:1)

不,没有。

IQueryable可以返回不同类型的对象(例如,如果您查询对象数组)。在这种极端情况下,您需要在访问它们时确定枚举查询中每个项目的类型。

演示此场景的示例代码:

object[] objs = new object[3]{ "string", 78, DateTime.Now };

var q = objs.AsQueryable().Skip(1).Take(2);

foreach( var o in q )
{
    var t = o.GetType();
}