C# LINQ到SQL跨实体集查询优化

C# LINQ到SQL跨实体集查询优化,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,我有两个不同的数据库。一个存储员工列表,另一个存储角色/权限信息。我正试图习惯于编写linq查询,这就是我用来获取某个角色的员工列表的方法 我非常确定,由于这些信息位于不同的数据库中,因此无法避免对它们进行两次不同的数据库调用,但我认为调用appSecModel的函数的前两行可以更有效地创建。我的理解是,一旦我在第一行调用.SingleOrDefault(),它就会对数据库执行。然后,当我对下一行调用.ToList()时,它会再次执行 有没有办法把这两条语句写成一条,这样我就只能在数据库中查询一

我有两个不同的数据库。一个存储
员工列表
,另一个存储
角色/权限信息
。我正试图习惯于编写linq查询,这就是我用来获取某个角色的员工列表的方法

我非常确定,由于这些信息位于不同的数据库中,因此无法避免对它们进行两次不同的数据库调用,但我认为调用
appSecModel
的函数的前两行可以更有效地创建。我的理解是,一旦我在第一行调用
.SingleOrDefault()
,它就会对数据库执行。然后,当我对下一行调用
.ToList()
时,它会再次执行

有没有办法把这两条语句写成一条,这样我就只能在数据库中查询一次这些信息

请注意,我们的权限/角色数据库包含内部构建的多个不同应用程序的权限/角色,这就是为什么要传入programId以避免角色名称冲突

private static EmployeeDirectoryEntities empModel = new EmployeeDirectoryEntities();
private static ApplicationSecurityEntities appSecModel = new ApplicationSecurityEntities();

public static List<Employee> EmployeesInRole(int programId, string roleName)
{
    var role = (from r in appSecModel.Roles where r.program_id == programId && r.name == roleName select r).SingleOrDefault();
    var roleEmpIds = (from re in appSecModel.EmployeeRoles where re.role_id == role.id select re.employee_id).ToList();
    return (from e in empModel.Employees where roleEmpIds.Contains(e.id) select e).ToList();
}
private static employeedirectoryenties empModel=new employeedirectoryenties();
私有静态应用程序安全实体appSecModel=新应用程序安全实体();
公共静态列表EmployeesInRole(int programId,字符串roleName)
{
var role=(来自appSecModel.Roles中的r,其中r.program_id==programmaid&&r.name==roleName选择r)。SingleOrDefault();
var roleEmpIds=(来自appSecModel.EmployeeRoles中的re,其中re.role_id==role.id选择re.employee_id).ToList();
return(从roleEmpIds.Contains(e.id)所在的empModel.Employees中的e选择e.ToList();
}

确保清理实例和资源,以便更好地使用类似的工具 另外,只有当您有一个db或其他数据库时,才可以修改使用一个实例,或者如何将两个db或数据库组合起来,或者在模型中添加另一个实例

dynamic role=null;
List<int?> roleEmpIds=null;

 using(ApplicationSecurityEntities appSecModel = new ApplicationSecurityEntities())
{
  role = (from r in appSecModel.Roles where r.program_id == programId && r.name ==  roleName select r).SingleOrDefault();
roleEmpIds = (from re in appSecModel.EmployeeRoles where re.role_id == role.id select  re.employee_id).ToList();

}
using(EmployeeDirectoryEntities empModel = new EmployeeDirectoryEntities())
{

return (from e in empModel.Employees where roleEmpIds.Contains(e.id) select e).ToList();

}
动态角色=null;
列表roleEmpIds=null;
使用(ApplicationSecurityEntities appSecModel=new ApplicationSecurityEntities())
{
role=(来自appSecModel.Roles中的r,其中r.program_id==programmaid&&r.name==roleName选择r)。SingleOrDefault();
roleEmpIds=(从appSecModel.EmployeeRoles中的re开始,其中re.role\u id==role.id选择re.employee\u id).ToList();
}
使用(EmployeeDirectoryEntities empModel=new EmployeeDirectoryEntities())
{
return(从roleEmpIds.Contains(e.id)所在的empModel.Employees中的e选择e.ToList();
}

我可以做出改变,但这并不能回答我的问题。