我有一个包含EntityName和EntityIds的审核模型。
我正在寻找一种创建动态查询的方法,该方法将从该表中检索EntityRecord和相关实体
这就是我到目前为止
var auditRows = from a in context.Audit
where (a.EntityName == entityName && a.EntityKey == entityKey);
我想得到的是,如果一个实体(例如“ Class”)具有相关的实体“ Students”。我想创建一个动态查询,将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
但我不知道如何构建查询或是否有更好的方法来创建查询。
最佳答案
我认为您只需要摆脱WHERE并替换为ANY:
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)
任何都将生成所需的WHERE EXISTS()。
关于c# - 使用linq的动态查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24114667/