アプリケーションで nhibernate を使用しており、いくつかの関係を持つマップされたモデルがあります。これらのリレーションはマッピングされてList<T>
おり、エンティティをメソッドに渡し、メソッドを呼び出して、Any()
各リレーションにレジスタがあるかどうかを確認する必要があります。
私はそれをやろうとしましたがGetValue()
、PropertyInfo からメソッドを呼び出すと、NHibernate はすべてをロードしますが、メソッドを呼び出すだけAny()
でパフォーマンスが向上し、nhibernate はチェックするためだけに単純なクエリをクエリします。私はこれを試します:
var type = entity.GetType();
foreach (var propertyInfo in type.GetProperties().Where(p => typeof (IEnumerable<>).IsAssignableFrom(p.PropertyType)))
{
// it works, but load everything just to check if there are something...
var collection = propertyInfo.GetValue(entity) as IEnumerable<dynamic>;
if (collection != null)
bool has = collection.Any();
}
ここで IEnumerable.Any() を呼び出したいのですが、GetValue なしでリフレクションを使用してこれを行うにはどうすればよいでしょうか?!