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是空的呢?我不觉得这是个好办法?
Data
的编译时类型总是相同的。从你描述的情况来看,听起来像是IQueryable<object>
。这就是为什么当您尝试检查类型时总是得到System.Object
的原因。
dataSource.Data.First().GetType();
考虑查询是IQueryable<T>
var typeOfT = query.GetType().GenericTypeArguments[0];
Works for me