【问题标题】:Lambda Syntax to Join Mutliple Reference Tables to Main Table将多个引用表连接到主表的 Lambda 语法
【发布时间】:2021-10-25 07:41:30
【问题描述】:

我有 3 张桌子:

  • 用户:(Id、FirstName、LastName、DepartmentId、LocationId)
  • 部门:(ID,部门名称)
  • 位置:(Id,LocationName)

如何使用 lambda 表达式将Department.Id 加入到User.DepartmentIdLocation.IdUser.LocationId

我目前被 1 个加入卡住了。试图对此进行研究,但我看到的结果与多对多关系有关。

var userJoin = _db.Users
                  .Join(_db.Departments, 
                        user => user.DepartmentId, 
                        dept=> dept.Id, 
                        (l, r) => new { l, r })
                  .Select(m => new UserModel()
                                   {
                                       // Map
                                   }).ToList();

【问题讨论】:

  • 如果您的模型具有正确定义的导航属性,则连接应该隐藏在这些访问后面并由 EF 代表您生成。您应该重新表述您的问题,以说明您面临的问题,而不是您想要的解决方案。此外,我认为一个部门应该有一个位置,无论是否有任何用户与之相关联。用户的位置不是部门的位置。如果有两个或多个不同位置的用户怎么办?那你选择哪一个作为部门的位置?

标签: c# asp.net-mvc lambda


【解决方案1】:

您有多种选择:

使用导航property。它会更容易,看起来像那样

context.Users.Include(x=>x.Department)
.Include(x=>x.Location)
.ToList()

使用连接

context.Users.Join(context.Departments, x=>x.DepartmentId, x=>x.Id, (user, department) => new
            {
                User = user, 
                Department = department
            })
            .Join(context.Locations, x=>x.User.LocationId, x=>x.Id, (userDepartment, location) => new
            {
                User = userDepartment.User, 
                Department = userDepartment.Department,
                Location = location
            })
            .ToList()

【讨论】:

    猜你喜欢
    • 2015-01-16
    • 1970-01-01
    • 2015-01-08
    • 1970-01-01
    • 2019-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多