如何使用Lambda表达式实现Users主表关联Departments、Locations参考表查询
实现代码
方式1:链式Join写法(和你现有代码逻辑一致,内连接)
在原有的单表关联基础上追加第二次Join关联Locations表即可,示例如下:
var userJoin = _db.Users // 关联部门表 .Join(_db.Departments, user => user.DepartmentId, dept => dept.Id, (user, dept) => new { user, dept }) // 关联位置表 .Join(_db.Locations, preResult => preResult.user.LocationId, loc => loc.Id, (preResult, loc) => new { preResult.user, preResult.dept, loc }) // 映射到自定义UserModel .Select(res => new UserModel { Id = res.user.Id, FirstName = res.user.FirstName, LastName = res.user.LastName, DepartmentName = res.dept.DepartmentName, LocationName = res.loc.LocationName // 其余字段按需补充映射 }).ToList();
方式2:导航属性写法(EF/EF Core环境更推荐,可读性更高)
如果你的实体类已经配置了导航属性,直接用Include写法更简洁:
var userList = _db.Users .Include(u => u.Department) .Include(u => u.Location) .Select(u => new UserModel { Id = u.Id, FirstName = u.FirstName, LastName = u.LastName, DepartmentName = u.Department.DepartmentName, LocationName = u.Location.LocationName }).ToList();
以上两种写法默认都是内连接,若需要保留关联字段为空的用户数据(左连接),可以将
Join替换为GroupJoin结合DefaultIfEmpty实现。
内容的提问来源于stack exchange,提问作者frank3579
相关产品推荐
相关产品推荐

