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 の個別のプロパティとして Employee と Project を必要としないことです。 result3[0].Project

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 に答える