实体框架是否从多个表中选择列(用于ThenInclude)?

时间:2019-09-24 17:51:18

标签: entity-framework-6

我对选择...有疑问

var applicationUser = unitOfWork.ApplicationUsers.GetAll().Include(i => i.ApplicationUserRoles).ThenInclude(i => i.ApplicationRole)
.Where(i => i.UserName.ToUpper() == userName.ToUpper())
.Select(i => new
{
    i.Email,
    i.FirstName,
    i.LastName,
    i.PhoneNumber,
    i.ImageUrl,
    i.JoinedDate,
    i.DateOfBirth,
    i.ApplicationUserRoles
})
.FirstOrDefault();

我无法在选择中获得ApplicationRole的使用方式吗?

2 个答案:

答案 0 :(得分:1)

如果将投影与@And("^Wait for \"([^\"]*)\" minutes$") public void waitForMintues(long time){ //Thread.sleep() or webdriver.manage().timeouts().implicitlyWait(time, TimeUnit.SECONDS) //click some button } 一起使用,则无需使用Select。只需选择值。要通过UserRoles获取角色,您需要Include来检索角色:

Select

您可以通过从应用程序角色中仅选择所需的角色详细信息来进一步完善此操作...

var applicationUser = unitOfWork.ApplicationUsers.GetAll()
.Where(i => i.UserName.ToUpper() == userName.ToUpper())
.Select(i => new
{
    i.Email,
    i.FirstName,
    i.LastName,
    i.PhoneNumber,
    i.ImageUrl,
    i.JoinedDate,
    i.DateOfBirth,
    ApplicationRoles = i.ApplicationUserRoles.Select(x => x.ApplicationRole).ToList()
})
.FirstOrDefault();

如果您希望获得最多1个结果,我建议使用 // ... ApplicationRoles = i.ApplicationUserRoles.Select(x => x.ApplicationRole.Select(ar => new { ar.RoleId, ar.RoleName })).ToList() 而不是SingleOrDefaultFirstOrDefault / First应该始终与FirstOrDefault / OrderBy条件一起使用,以确保可预测的结果。

答案 1 :(得分:0)

如果我可以用于ApplicationRoles,它正在工作

.Select(i => new
{i.Email,i.FirstName,i.LastName,i.PhoneNumber,i.ImageUrl,i.JoinedDate,i.DateOfBirth,
ApplicationRoles = i.ApplicationUserRoles.Select(x => x.ApplicationRole).ToList(),
})

我不能为ApplicationUserRoles使用它如何工作?

public class ApplicationUserSummary
{
    public DateTime JoinedDate { get; set; }
    public string ImageUrl { get; set; }
    public string Email { get; set; }
    public string PhoneNumber { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime? DateOfBirth { get; set; }
    public ICollection<ApplicationRole> ApplicationRoles { get; set; }
    public ICollection<ApplicationUserRole> ApplicationUserRoles { get; set; }
}