【问题标题】:Nested Query .Net Core嵌套查询 .Net Core
【发布时间】:2022-06-10 18:24:37
【问题描述】:

我想获取不是审核人的员工名单。

这是员工实体

public class Employee: BaseEntity
    {
        public readonly object DepartmentName;

        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int RegistrationNumber { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Email { get; set; }
        
    }

这是 Reviwee 实体

public class Reviwee : BaseEntity
    {     
        public Guid EmployeeId { get; set; }
        public string EmployeeFirstName { get; set; }
        public virtual Employee Employee { get; set; }
        
    }

这是基础实体

public class BaseEntity
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Guid Id { get; set; }
    }

这是我写的方法

public async Task<List<EmployeeDto>> GetEmployeeListAsync()
        {
            var employeeList = await _context.Employees.Where( x=> x.Id != _context.Reviwees.Select(x => x.EmployeeId))
                .Select(x => new EmployeeDto
                {
                    Id = x.Id,
                    FirstName = x.FirstName
                })
                .ToListAsync();

            return employeeList;
        }

上面的方法是错误的。

【问题讨论】:

  • 哪个类型有_context.Employees?为什么返回Reviwee

标签: .net sql-server entity-framework-core


【解决方案1】:

我不知道为什么要这样制作模型,
EmployeeReviwee具有相同的继承性,Reviwee只是具有特定特征的Employee,因此您可以添加布尔值属性IsReviwee

public class Employee: BaseEntity
{
    public readonly object DepartmentName;

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int RegistrationNumber { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    public bool IsReviwee { get; set; }
    
}

查询可能是

public async Task<List<EmployeeDto>> GetEmployeeListAsync()
    {
        var employeeList = await _context.Employees.Where( x=> x.IsReviwee ==false).ToListAsync();

        return employeeList;
    }

如果你不能修改实体 尝试这样做但要注意,Reviwee 不需要字段 EmployeeId 因为从 BaseEntity 继承 Id

var query =    
from e in _context.Employee
where !(from o in _context.Reviwee 
        select o.Id)    
       .Contains(e.Id)    
select e;

【讨论】:

    猜你喜欢
    • 2019-07-20
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多