Динамический запрос с использованием linq

У меня есть модель аудита, которая содержит EntityName и EntityIds.

Я ищу способ создания динамического запроса, который будет извлекать EntityRecord и связанные объекты из этой таблицы

это то, что я до сих пор

var auditRows = from a in context.Audit
                where (a.EntityName == entityName && a.EntityKey == entityKey);

То, что я хотел получить, - это если у сущности, скажем, "Класс", есть связанная сущность "Студенты". Я хочу создать динамический запрос, который создает предложение where как

where (a.EntityName == entityName && a.EntityKey == entityKey) ||
      (a.EntityName == "Students" && context.Students.Where(s => s.ClassID == entityKey)

Я нашел способ получить связанные лица

var objectContext = ((IObjectContextAdapter)context).ObjectContext;
var container = objectContext.MetadataWorkspace.GetEntityContainer(objectContext.DefaultContainerName, DataSpace.CSpace);
var relatedEntitySets = container.EntitySets.Where(es => es.ElementType.Name == entitySet).First().ElementType.NavigationProperties

но я не знаю, как построить запрос или есть лучший способ создать запрос.

1 ответ

Я думаю, вам просто нужно избавиться от ГДЕ и заменить на ЛЮБОЕ:

var students = context.GetTable<Students>();
// Repeat for other tables

where (a.EntityName == entityName && a.EntityKey == entityKey) ||
      (a.EntityName == "Students" && students.Any(s => s.ClassID == entityKey) ||
      (a.EntityName == "People" && people.Any(s => s.ClassID == entityKey) ||
      (a.EntityName == "FOO" && foo.Any(s => s.Bar == entityKey)

Любой будет генерировать ГДЕ СУЩЕСТВУЕТ () вы хотите.

Другие вопросы по тегам