我使用反射动态获取数据(实体类型在运行时定义)。每当我的 currentObject 没有 1:N 关系(通过“First”泛型方法反射实现)时,我当前都会返回一个对象,但我还需要获取 1:N 子对象,即 EntityCollection<T>。
var valoresp = getFilho(pai, filho, raizAtual);
if (valoresp == null)
return new object();
if (!filho.A_Ocorrencia_Tabela.Contains("1:N"))
{
var firstMethod = typeof(Enumerable).GetMethods().Single(method => method.Name == "First"
&& method.IsStatic && method.GetParameters().Length == 1);
var interfaceImplementation = MethodResolver.GetImplementationOfInterface(valoresp.GetType(),
firstMethod.GetParameters().First().ParameterType.GetGenericTypeDefinition());
var genericArgumentsTypes = interfaceImplementation.GetGenericArguments();
var genericMethod = firstMethod.MakeGenericMethod(new[] { genericArgumentsTypes[0] });
try
{
var resultado = genericMethod.Invoke(null, new[] { valoresp });
return resultado;
}
catch (Exception)
{
return new object();
}
}
else
{
if (valoresp.GetType().IsGenericType && (valoresp.GetType().GetGenericTypeDefinition() == typeof(EntityCollection<>)) )
{
//here is the problem:
var typeValoresp = valoresp as EntityCollection<object>;
}
}
事实是我的“valoresp”变量可以是 480 种不同类型的 EntityCollection(这就是为什么我不会手动检查类型)(EntityCollection<table1>,EntityCollection<Table2> ...)
我需要一个子对象列表,但找不到使用反射将 EntityCollection 转换为 List 的方法。