IQueryable中T的运行时类型

本文关键字:运行时 类型 IQueryable | 更新日期: 2023-09-27 18:19:19

是否有可能获得IQueryable的T-Runtime类型?如果它是一个普通列表,那就没有问题,但如果我检查IQueryable,我总是得到System.Object的类型。我的代码现在看起来是这样的:

private static Type GetDtoTypeFromDataSource(ReportDataSource dataSourceFromDb)
{
    Type result = null;
    if (dataSourceFromDb.Data.GetType().IsGenericType)
    {
        Type[] genericArguments = dataSourceFromDb.Data.GetType().GetGenericArguments();
        result = genericArguments.First();
        if (result == typeof(Object))
        {
            var obj = dataSourceFromDb.Data.Cast<object>().ToList();
            var t2 = obj.First().GetType();
            var t = obj.GetType().GetGenericArguments();
            var t3 = obj.GetType();
            result = obj.GetType();
        }
    }
    else
    {
        result = dataSourceFromDb.Data.GetType().GetElementType();
    }
    return result;
}

我希望,如果我实际上通过"ToList"加载列表,我得到的数据,但不工作,以及

var t2 = obj.First().GetType();

可以,但是如果List是空的呢?我不觉得这是个好办法?

IQueryable<T>中T的运行时类型

Data的编译时类型总是相同的。从你描述的情况来看,听起来像是IQueryable<object>。这就是为什么当您尝试检查类型时总是得到System.Object的原因。

至于这个集合中存储的实际对象的运行时类型,您必须以类似于您在问题中所示的方式检查这些对象:
dataSource.Data.First().GetType();

考虑查询是IQueryable<T>

var typeOfT = query.GetType().GenericTypeArguments[0];

Works for me

相关文章: