【问题标题】:How to only select child entities of an entity in entity framework? [duplicate]如何在实体框架中只选择实体的子实体? [复制]
【发布时间】:2019-03-18 17:30:45
【问题描述】:

我想在实体框架 select 语句中仅选择 CFO 以下的子实体及其子实体。

这是我的桌子:

+-------+------------+----------+
| OrgId | Name       | ParentId |
+-------+------------+----------+
| 1     | COO        |          |
+-------+------------+----------+
| 2     | CFO        |          |
+-------+------------+----------+
| 3     | Accountant | 2        |
+-------+------------+----------+
| 4     | Bookkeeper | 3        |
+-------+------------+----------+
| 5     | Controller | 2        |
+-------+------------+----------+
| 6     | Operations | 1        |
+-------+------------+----------+

我只想选择这个:

+-------+------------+----------+
| OrgId | Name       | ParentId |
+-------+------------+----------+
| 3     | Accountant | 2        |
+-------+------------+----------+
| 4     | Bookkeeper | 3        |
+-------+------------+----------+
| 5     | Controller | 2        |
+-------+------------+----------+

实体框架选择:

public virtual IList<OrgStructureModel> GetAll()
{
    using (var db = _context)
    {
        var result = _session.GetObjectFromJson<IList<OrgStructureModel>>("OrgStructure");

        if (result == null)
        {
            result = db.OrgStructures
                .Select(org => org.ToOrgStructureModel(db.OrgStructures.Where(s => s.ParentId == org.OrgId).Count() > 0))
                .ToList();

            _session.SetObjectAsJson("OrgStructure", result);
        }

        return result;
    }
}

如何在 EF 中实现这一点?

这是我尝试过的 我已经尝试过测试只显示孩子与任何父母.Where(e =&gt; e.ParentId != null):

            result = db.OrgStructures
                .Select(org => org.ToOrgStructureModel(db.OrgStructures.Where(s => s.ParentId == org.OrgId).Count() > 0))
                .Where(e => e.ParentId != null)
                .ToList();

但这返回了 0 个结果

ToOrgStructureModel的定义:

public static OrgStructureModel ToOrgStructureModel(this OrgStructure org, bool hasChildren)
{
    return new OrgStructureModel
    {
        OrgId = org.OrgId,
        ParentId = org.ParentId,
        Name = org.Name
        hasChildren = hasChildren
    };
}

更新: 上面的查询有数据的 Telerik TreeList 控件似乎有问题,但该控件不会输出数据。但问题仍然存在,我如何使用 LINQ 获得OrgId: 3,4,5

【问题讨论】:

  • 可以使用LINQ的join方法
  • 如果有人有例子,那就太好了,谢谢!
  • 这不是 where parentid == null 那么吗?
  • 如果我选择OrgId: 2,我应该返回OrgId: 3, 5 还是OrgId: 3, 4, 5?第一个答案很简单,第二个答案是不可能的,因为它需要Recursive CTE which Entity-Framework does not support (linq nor lambda)
  • @ErikPhilips 应该回复 OrgId: 3,4,5。编辑后:我看到它是这样存储的过程!

标签: c# entity-framework


【解决方案1】:

只带回 ParentId 不为空的结果。

【讨论】:

  • 编辑问题更清楚。 (添加了另一行)
猜你喜欢
  • 2020-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多