gpt4 book ai didi

c# - 使用 linq 进行动态查询

转载 作者:太空宇宙 更新时间:2023-11-03 15:54:39 25 4
gpt4 key购买 nike

我有一个包含 EntityName 和 EntityId 的审核模型。

我正在寻找一种方法来创建将从该表中检索 EntityRecord 和相关实体的动态查询

这是我目前的情况

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

我想得到的是如果一个实体,比如说“类(class)”有相关的实体“学生”。我想创建一个动态查询,将 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)

Any 将生成您想要的 WHERE EXISTS()。

关于c# - 使用 linq 进行动态查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24114667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com