C# 筛选值列表的相关实体

C# 筛选值列表的相关实体,c#,entity-framework,entity-framework-6,eager-loading,C#,Entity Framework,Entity Framework 6,Eager Loading,我的应用程序中有以下实体类: public class Project { public virtual int Id { get; set; } public virtual string Name { get; set; } public virtual ICollection<ProjectManager> ProjectManagers { get; set; } } public class Manager { public virtual

我的应用程序中有以下实体类:

public class Project
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual ICollection<ProjectManager> ProjectManagers { get; set; }
}

public class Manager
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
}

public class ProjectManager
{
    public virtual int ManagerId { get; set; }
    public virtual int ProjectId { get; set; }
    public virtual bool CanUpdate { get; set; }
    public virtual bool CanDelete { get; set; }
}
每个项目的
ProjectManagers
属性现在包含所有管理者的信息,但我只想加载当前管理者的记录

我看到了以下方法:

context.Entry(project)
       .Collection(x => x.ProjectManagers)
       .Query()
       .Where(x => x.ManagerId == currentManagerId)
       .Load();
但是,它需要对每个项目进行单独的
SELECT
查询。可以在单个查询中完成整个项目列表吗

澄清:

// Sample of an existing data
var existing = new []
{
    new Project
    {
        Name = "A",
        ProjectManagers =
        {
            new ProjectManager { ManagerId = 1 },
            new ProjectManager { ManagerId = 2 },
            new ProjectManager { ManagerId = 3 }
        }
    },
    new Project
    {
        Name = "B",
        ProjectManagers =
        {
            new ProjectManager { ManagerId = 2 },
        }
    },
};

// What I want to get (in a single query!)
var desired = new []
{
    new Project
    {
        Name = "A",
        ProjectManagers =
        {
            new ProjectManager { ManagerId = 1 },
            // nobody else here
        }
    }
};

这是因为懒散吗?因此,来自
所需的
列表的项目A,作为一个对象,与来自
现有的
列表的项目A不同,因为它有不同的管理者?稍后您可能会将自己设置为失败…@SWeko,不是真的,因为EF知道只加载了一些相关的实体。它就像一个单独的项目的魅力,我只需要一种方法来将相同的逻辑应用到项目列表中。AFAIK,EF只知道是否加载了相关属性-我不知道它是否能够优雅地处理这种半加载的场景。例如,如果您向
所需的
项目添加第二个管理器,并保存其更改,会发生什么情况?@SWeko,数据只是通过RIA WCF传输到客户端,我只是显示它,而不是保存任何内容。这不应该是个大问题。
// Sample of an existing data
var existing = new []
{
    new Project
    {
        Name = "A",
        ProjectManagers =
        {
            new ProjectManager { ManagerId = 1 },
            new ProjectManager { ManagerId = 2 },
            new ProjectManager { ManagerId = 3 }
        }
    },
    new Project
    {
        Name = "B",
        ProjectManagers =
        {
            new ProjectManager { ManagerId = 2 },
        }
    },
};

// What I want to get (in a single query!)
var desired = new []
{
    new Project
    {
        Name = "A",
        ProjectManagers =
        {
            new ProjectManager { ManagerId = 1 },
            // nobody else here
        }
    }
};