【发布时间】:2021-10-22 16:52:12
【问题描述】:
我在从具有 ICollection 的自引用数据表中查询数据时遇到问题。
这是我的表结构:
public class SoqHeading
{
public int Id { get; set; }
public string ItemNo { get; set; }
public string Heading { get; set; }
public SoqRevision SoqRevision_NP { get; set; }
public ICollection<SoqItem> Items { get; set; }
public int? ParentSoqHeadingId { get; set; }
public SoqHeading Parent_NP { get; set; }
public ICollection<SoqHeading> Children_NP { get; set; }
}
public class SoqItem
{
public int Id { get; set; }
public SoqPreliminaryOrContract_enum PreliminaryOrContract { get; set; }
public int SoqHeadingId { get; set; }
public SoqHeading SoqHeading_NP { get; set; }
}
我在SoqHeading 表中有一个自引用关系,它是一对多。 SoqHeading 表可以有零个或多个SoqItems。
我的数据库中的数据是这样的
我想要的是从 SoqHeading 表的根节点及其子项和项目中查询所有内容。
喜欢这个
{
"ItemNo": "C",
"Items": [
{
"ItemNo": "c-1",
},
{
"ItemNo": "c-2",
}
],
"Children_NP": [
{
"ItemNo": "C.1",
"Children_NP": [
{
"ItemNo": "C.1.1",
"Items": [
{
"ItemNo": "c.1.1-1",
},
{
"ItemNo": "c.1.1-2",
}
],
"Children_NP": [],
},
{
"ItemNo": "C.1.2",
"Items": [
{
"ItemNo": "c.1.2-1",
},
{
"ItemNo": "c.1.2-2",
}
],
"Children_NP": [],
}
],
},
{
"ItemNo": "C.2",
"Children_NP": [],
}
]
}
但目前我从这样的查询中获取数据
[
{
"ItemNo": "C"
},
{
"ItemNo": "C.1.2",
}
]
C.1.2 必须在 C 中,但不是。 C 和 C.1.2 处于同一级别,我不会通过以下查询产生此级别
var entity = await _context.SoqHeadings
.Include(i=>i.Items)
.Include(i => i.Children_NP)
.Where(w => w.SoqRevision_NP.ProjectId == 10)
.ToListAsync();
请帮忙
【问题讨论】:
-
JSON 表示不是显示您想要的内容的最佳方式,但我认为 this 是您的问题。
-
能否请您清除您的 jsons 并仅保留重要属性。很难弄清楚你拥有什么和想要什么。
-
@GertArnold,感谢您的尝试,但这不是我的问题
-
@Serge,我已经更新了这个问题。请检查并让我知道现在是否清楚
-
那么你需要某种递归查询。类似的问题还有很多,找LINQ+recursive 或者hierarchy吧。
标签: sql-server entity-framework-core linq-to-sql linq-to-entities ef-core-5.0