Динамический запрос с использованием 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)
Любой будет генерировать ГДЕ СУЩЕСТВУЕТ () вы хотите.