0

我在使用 EF 中的方法组加载相关实体时遇到了一些麻烦。

在简单查询中,加载相关实体可以正常工作Include

例如:

var result =
    Repository.Query<TimeState>(x => x.Accepted == 0 && x.ProjectID != null && myTeam.Contains(x.EmployeeID))
                       .Include(typeof(Project).Name)
                       .Include(typeof(Employee).Name)
                       .Include(typeof(EmployeeDetails).Name)
                       .OrderByDescending(x => x.SubmitedDate);

完美运行,加载项目和员工

但在下一个查询中不加载项目和员工

var result2 = from item in Repository.Query<TimeState>(x => x.Accepted == 0 && x.ProjectID != null)
                                               .Include(typeof(Project).Name)
                                               .Include(typeof(Employee).Name)
                                               .Include(typeof(EmployeeDetails).Name)
               let projectId = (int)item.ProjectID
               let isA = projectsIds.Contains(projectId) && item.Employee.EmployeeDetails.SuperiorID == id
               let isB = item.Project.ManagerID == id && employeesTeam.Contains(item.EmployeeID)
               where isA || isB
               orderby item.SubmitedDate descending
               select item;

我试图做这样的改变:select new { item, item.Employee, item.Project };

var result3 = from item in Repository.Query<TimeState>(x => x.Accepted == 0 && x.ProjectID != null)
                                               .Include(typeof(Project).Name)
                                               .Include(typeof(Employee).Name)
                                               .Include(typeof(EmployeeDetails).Name)
               let projectId = (int)item.ProjectID
               let isA = projectsIds.Contains(projectId) && item.Employee.EmployeeDetails.SuperiorID == id
               let isB = item.Project.ManagerID == id && employeesTeam.Contains(item.EmployeeID)
               where isA || isB
               orderby item.SubmitedDate descending
               select new { item, item.Employee, item.Project };  

之后,result3[0].Employee具有与result3[0].Project(或该集合中的任何其他项目)相同的值。
问题是我不需要 Employee 和 Project 作为这个动态对象result3中的单独属性。

在返回 result2 的方法中怎么可能有 Employee 和 Project ?:)

4

1 回答 1

2

我很少使用查询语法,而且我从来没有遇到过使用 .Include(typeof(..).Name) 语法的人,所以请尝试以下操作:

var result2 = (from item in Repository.Query<TimeState>(x => x.Accepted == 0 && x.ProjectID != null)
               let projectId = (int)item.ProjectID
               let isA = projectsIds.Contains(projectId) && item.Employee.EmployeeDetails.SuperiorID == id
               let isB = item.Project.ManagerID == id && employeesTeam.Contains(item.EmployeeID)
               where isA || isB
               orderby item.SubmitedDate descending
               select item)
  .Include(i=>i.Projects)
  .Include(i=>i.Employees)
  .Include(i=>i.EmployeeDetails);

您可能还需要包括在内using System.Data.Entity;才能使其正常工作。

于 2016-01-20T17:44:17.843 回答