Entity Frameworkによって生成されるDynamicProxiesは、POCOクラスの子孫です。それはあなたがPOCOに結果をアップキャスト場合は、実際にすべてのプロパティにアクセスすることができ、次のとおりです。
foreach (var item in items)
{
YourNamespace.Site site = (YourNamespace.Site)item.GetType().GetProperty("Site").GetValue(item,null);
Console.WriteLine(site.SiteName);
}
あなたには、いくつかの理由のためにリフレクションを使用する必要がある場合は、これもまた可能である:
foreach (var item in items)
{
PropertyInfo piSite = item.GetType().GetProperty("Site");
object site = piSite.GetValue(item,null);
PropertyInfo piSiteName = site.GetType().GetProperty("SiteName");
object siteName = piSiteName.GetValue(site, null);
Console.WriteLine(siteName);
}
反射が遅く、コンパイル時に型がわからない場合はTypeDescriptorを使用します:
PropertyDescriptor siteProperty = null;
PropertyDescriptor siteNameProperty = null;
foreach (var item in items)
{
if (siteProperty == null) {
PropertyDescriptorCollection itemProperties = TypeDescriptor.GetProperties(item);
siteProperty = itemProperties["Site"];
}
object site = siteProperty.GetValue(item);
if (siteNameProperty == null) {
PropertyDescriptorCollection siteProperties = TypeDescriptor.GetProperties(site);
siteNameProperty = siteProperties["SiteName"];
}
object siteName = siteNameProperty.GetValue(site);
Console.WriteLine(siteName);
}
なぜヌルパラメータですか? [GetValue(object o)](https://msdn.microsoft.com/en-us/library/hh194385(v=vs.110).aspx)のオーバーロードは改善されませんか? – orhtej2
値を取得する方法:返されたオブジェクトに対して別のリフレクションコールを行うか、['dynamic'型]を使用します(https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/types)。/use-type-dynamic)を使用してジョブを実行します。 – orhtej2
私は別の反射を試していますが、私はそれを得ることはできません.. –