リフレクションを使用して動的にデータを取得します (エンティティ タイプは実行時に定義されます)。現在、currentObject に 1:N の関係がない場合は常に単一のオブジェクトを返していますが (「最初の」ジェネリック メソッド リフレクションの実装を介して)、EntityCollection< T > である 1:N の子も取得する必要があります。
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 をリストに変換する方法が見つかりませんでした。