通过从行过滤条件来查询表

时间:2017-10-17 11:40:39

标签: c# sql entity-framework linq

需要帮助查询c#中的实体框架。

我有一个高级搜索页面,我可以从复选框列表中选择多个选项。应从表中筛选这些选定的选项,该表将每个选项作为值。

  

这是我桌子的快照。

enter image description here

  

从这张表中,我的选择选项如下:

enter image description here

如果我选择了多个,我需要检索所有已检查值的数据。即,我应该对所选值应用“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#中执行此操作,因为我现在无法在我的数据库中创建过程。

1 个答案:

答案 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变得更小,因为它需要满足所有这些条件。