是否有可能获得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;
}
我希望,如果我真的通过&#34; ToList&#34;加载列表我得到了数据,但也没有工作。
var t2 = obj.First().GetType();
会不会有诀窍,但如果List是空的怎么办?这对我来说似乎不是一个好的解决方案吗?
答案 0 :(得分:1)
编译时类型Data
将始终相同。根据您的描述,它听起来像是IQueryable<object>
。这就是您在尝试检查类型时始终获得System.Object
的原因。
对于存储在此集合中的实际对象的运行时类型,您必须以与您在问题中显示的方式类似的方式检查对象:
dataSource.Data.First().GetType();
答案 1 :(得分:-1)
考虑查询是 IQueryable<T>
var typeOfT = query.GetType().GenericTypeArguments[0];
对我有用