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
}
}
};