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();
}
我可以做出改变,但这并不能回答我的问题。