需要帮助查询c#中的实体框架。
我有一个高级搜索页面,我可以从复选框列表中选择多个选项。应从表中筛选这些选定的选项,该表将每个选项作为值。
这是我桌子的快照。
从这张表中,我的选择选项如下:
如果我选择了多个,我需要检索所有已检查值的数据。即,我应该对所选值应用“AND”条件,以获得具有所有选定值的员工。下面的代码不会将过滤器应用为“AND”操作,因为我将每个项目分别与行列表进行比较。
foreach (var item in UIFilter.SecurityOptions)
{
securityOverrideList.AddRange(
secureDbContext.
SecurityOverride.
Where(p => p.SECURITY_ROLE_CD.Equals(item)).
Select(p => p.EMPL_ID));
}
有人可以建议我在C#中执行此操作,因为我现在无法在我的数据库中创建过程。
答案 0 :(得分:0)
您可以尝试以下方法:
var potentialEmployees = secureDbContext.SecurityOverride.Where(a => UIFilter.SecurityOptions.Contains(a.SECURITY_ROLE_CD));
var securityOverrideList = potentialEmployees.Select(x => x.EMPL_ID).Distinct();
foreach (var item in UIFilter.SecurityOptions)
{
var subsetEmployeeIds = potentialEmployees.Where(a => a.SECURITY_ROLE_CD == item).Select(x => x.EMPL_ID);
securityOverrideList = securityOverrideList.Where(a => subsetEmployeeIds.Contains(a));
}
查看您的结构,将不会有单行符合所有选定的角色。因此,我们需要获得所有潜在的employeeId(假设这是您正在寻找的,因为您只预测员工ID)。
接下来,我们再次针对每个安全角色进行循环,以确保securityOverrideList变得更小,因为它需要满足所有这些条件。