IQueryable 中 T 的运行时类型<T>
Runtime-Type of T in IQueryable<T>
是否有可能获得 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();
会的,但是如果列表是空的怎么办?这对我来说似乎不是一个好的解决方案?
Data
的编译时类型将始终相同。根据您的描述,听起来像是 IQueryable<object>
。这就是为什么当您尝试检查类型时总是得到 System.Object
。
至于 运行-time 类型的实际对象存储在此集合中,您必须以类似于您所展示的方式检查对象在你的问题中:
dataSource.Data.First().GetType();
正在考虑查询 IQueryable<T>
var typeOfT = query.GetType().GenericTypeArguments[0];
适合我
是否有可能获得 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();
会的,但是如果列表是空的怎么办?这对我来说似乎不是一个好的解决方案?
Data
的编译时类型将始终相同。根据您的描述,听起来像是 IQueryable<object>
。这就是为什么当您尝试检查类型时总是得到 System.Object
。
至于 运行-time 类型的实际对象存储在此集合中,您必须以类似于您所展示的方式检查对象在你的问题中:
dataSource.Data.First().GetType();
正在考虑查询 IQueryable<T>
var typeOfT = query.GetType().GenericTypeArguments[0];
适合我