我有一个名为companyContext的上下文。有三个表报告,日志和员工。我给了一个案例id,我需要得到属于某个案例的所有员工的列表(如果有一个日志,但我还不需要担心)。我做了一个查询获取所有EmployeeID等于Employee的雇员。ID,其中报告的CaseID等于case.id。但是,它不是返回一个列表,而是返回一个[Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable}]
我的查询是否正确?谢谢你的家伙。
var employees = await context.Reports.Include(s => s.Employee)
.ThenInclude(e => e.ID)
.AsNoTracking()
.Where(r => r.CaseID == Case.Id);
模型public class Log
{
public int ID { get; set; }
public string Input { get; set; }
public string Tag { get; set; }
public DateTime LogDate { get; set; }
public ICollection<Report> Reports { get; set; }
}
public class Employee
{
public int ID { get; set; }
public string Code { get; set; }
public string Name { get; set; }
public ICollection<Report> Reports { get; set; }
}
public class Report
{
public int ID { get; set; }
public string CaseID { get; set; }
public int EmployeeD { get; set; }
public int? LogID { get; set; }
public Employee Employee { get; set; }
public Log Log { get; set; }
}
如果序列中有多个元素,SingleOrDefaultAsync
将抛出异常。
所以你不应该使用SingleOrDefaultAsync如果你期望多个记录
如果我正确地解释了你的问题,并且你想要员工自己,你可以从他们开始,然后通过Employee
类的.Reports
导航属性缩小范围。
var employees = await context.Employees.AsNoTracking()
.Where(e => e.Reports.Any(r => r.CaseID == case.Id))
.ToListAsync();
所以实体实际上就像使用一个真正的数据库。我必须使用where和select子句,还要使用toList将其转换为可读的内容。
var employees = await context.Reports.Where(r => r.CaseID == Case.Id);
.Select(r => r.Employee)
.ToList();