【问题标题】:How to query for 2 depths? [duplicate]如何查询2个深度? [复制]
【发布时间】:2019-12-06 08:45:21
【问题描述】:

示例:A 是经理,B 是 A 的下属,C 是 B 的下属。

我需要做的是在 A 的屏幕上显示一个下属列表,这些下属是 B 和 C 的信息。 这就是我现在所拥有的,它将显示以 A 作为其经理的人,即 B 等。

 displayList = db.LeaveApplicationDbSet
      .Where(l => db.EmployeeDbSet
                .FirstOrDefault(e => e.user_id.Equals(l.UserId))
                .manager_id.Equals(userDetails.EmployeeId)
      );

关于如何获得层次结构的大子部分的任何想法? 例如:A -> B -> C 所以从 A 的角度来看,他/她应该能够看到 B 和 C 的信息

更新:

public class MysqlDbContext: DbContext
{   
    public MysqlDbContext() : base(dbName)
    { }

    public DbSet<Employee> EmployeeDbSet { get; set; }
}

public class Employee : IValidatableObject
{
    [Column("id")]
    public int id { get; set; }

    [Required]
    [Column("user_id")]
    public string user_id { get; set; }

    [Column("full_name")]
    public string full_name { get; set; }

    [Required]
    public string manager_id { get; set; }
}

【问题讨论】:

  • 我没有使用 asp、entity 和 linq 的经验,所以如果它不适合您的程序,请忽略此命令。我会想到一个树数据结构来完成这个,当然这也可以通过数据库查询来完成。
  • 你能展示你的实体吗?这样我们就可以对属性有更清晰的了解。
  • 添加了新代码,不确定您是否是这个意思
  • 您正在寻找的是 Linq 递归,但使用循环的常规方法来解决这个问题要简单得多。
  • manager_id 是 SQL 中的外键吗?

标签: c# asp.net-mvc entity-framework linq


【解决方案1】:

一个简单的解决方案是将其分隔在不同的查询中。首先,您查询以 A 为经理的员工。然后,您查询将 B 中的任何一个作为经理的员工。 像这样的:

//All employees of person A 
var B = db.LeaveApplicationDbSet.Where(e => e.manager_id == "A");
var C = new List<Employee>();

//All employees from B
foreach(var i in B){
var D = db.LeaveApplicationDbSet.Where(e => e.manager_id == i.id).ToList();
C.AddRange(D);

}

【讨论】:

  • 这是不正确的,C每次在foreach循环中都会被覆盖。
  • 是的,对不起。错过了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-31
  • 2013-04-12
相关资源
最近更新 更多