У меня была похожая ситуация, когда мне нужен был способ динамической загрузки значений для раскрывающихся списков, используемых для критериев поиска на странице, позволяющий пользователям запускать специальные запросы для данной таблицы.Я хотел сделать это динамически, чтобы при добавлении новых полей не было никакого изменения кода на передней или задней части.Таким образом, используя динамический тип и некоторое базовое отражение, он решил мою проблему.
Мне нужно было вызвать свойство DbSet для DbContext на основе универсального типа для DbSet.Так, например, тип может называться County, а свойство DbSet называется Counties.Приведенный ниже метод загрузки будет загружать объекты типа T (округ) и возвращать массив объектов T (список объектов округов), вызывая свойство DbSet с именем Counties.EntityList - это просто объект-декоратор, который берет список элементов поиска и добавляет дополнительные свойства, необходимые для сетки на внешнем интерфейсе.
public T[] Load<T>() where T : class
{
var dbProperty = typeof(Data.BmpDB).GetProperties().FirstOrDefault(
x => x.GetMethod.ReturnType.GenericTypeArguments[0].FullName == typeof(T).FullName);
if (dbProperty == null)
return null;
dynamic data = dbProperty.GetMethod.Invoke(BmpDb, null);
var list = Enumerable.ToList(data) as List<T>;
var entityList = new Data.EntityList<T>(list);
return entityList.Results;
}