代码之家  ›  专栏  ›  技术社区  ›  D.B

Linq用于带有Entity Framework的分层关系模型,过滤嵌套表

  •  1
  • D.B  · 技术社区  · 9 年前

    我有以下数据库模型,我需要从表AspNetUsers查询公司实体以获取特定的用户名。我不知道如何在Entity Framework中使用Linq lambda表达式筛选和钻取相关的分层表。我的所有域类都需要外键和导航属性。我会感激任何帮助。

    enter image description here

    2 回复  |  直到 9 年前
        1
  •  1
  •   King    9 年前

    根据我的理解,我给出了解决方案。我希望它能对你有所帮助。

            //Test Data 
    
            DataTable Companies = new DataTable();
            Companies.Columns.Add("Companyid", typeof(string));
            Companies.Columns.Add("CompanyName", typeof(string));
    
            DataTable Teams = new DataTable();
            Teams.Columns.Add("Companyid", typeof(string));
            Teams.Columns.Add("TeamID", typeof(string));
    
            DataTable ApplicationUserTeam = new DataTable();
            ApplicationUserTeam.Columns.Add("TeamID", typeof(string));
            ApplicationUserTeam.Columns.Add("ApplicationUserID", typeof(string));
    
            DataTable AspnetUsers = new DataTable();
            AspnetUsers.Columns.Add("ID", typeof(string));
            AspnetUsers.Columns.Add("Name", typeof(string));
    
            Companies.Rows.Add("10", "Infosys");
            Companies.Rows.Add("12", "Tech mahindra");
    
            Teams.Rows.Add("10", "T18");
            Teams.Rows.Add("12", "T12");
    
            ApplicationUserTeam.Rows.Add("T10", "120");
            ApplicationUserTeam.Rows.Add("T12", "110");
    
            AspnetUsers.Rows.Add("110", "king");
            AspnetUsers.Rows.Add("112", "little");
    
    
            var id = AspnetUsers.AsEnumerable().Where(s => s.Field<string>("Name").Equals("king")).Select(s => s.Field<string>("ID")).First();
            var Teamid = ApplicationUserTeam.AsEnumerable().Where(s => s.Field<string>("ApplicationUserID").Equals(id)).Select(s => s.Field<string>("TeamID")).First();
            var Companyid = Teams.AsEnumerable().Where(s => s.Field<string>("TeamID").Equals(Teamid)).Select(s => s.Field<string>("Companyid")).First();
            var Company = Companies.AsEnumerable().Where(s => s.Field<string>("Companyid").Equals(Companyid));
    
            foreach (var item in Company)
            {
                Console.WriteLine(item[0] + "  " + item[1]);
            }
    
        2
  •  0
  •   SWilko    9 年前

    在不知道数据库上下文等的情况下,它可能是这样的

    db.Comapnies.Include(c => c.Teams
                               .Select(t => t.ApplicationUserTeam
                                             .Select(aut => aut.AspNetUsers)));