【发布时间】:2014-03-22 14:08:52
【问题描述】:
我使用以下代码根据用户选项过滤集合,这些选项通过组合框捕获并发送到视图模型或控制器以实现级联过滤:
IEnumerable<SubsystemDTO> _ssDTOs = _subsystemService
.GetAllSubsystemsList()
.Where(s => s.MS != null
&& s.MS.Equals(_subsystemRptPanelViewModel.SelectedMS)
&& _subsystemRptPanelViewModel.SelectedMS != "All")
.Where(s => s.Flag != null
&& s.Flag.Equals(_subsystemRptPanelViewModel.SelectedFlag)
&& _subsystemRptPanelViewModel.SelectedFlag != "All")
.Where(s => s.Scope != null
&& s.Scope.Equals(_subsystemRptPanelViewModel.SelectedScope)
&& _subsystemRptPanelViewModel.SelectedScope != "All");
我有 3 个组合框来收集用户选项,它们以级联方式应用于集合,如图所示。数据是从数据库中获取的,其中包含的值等于组合框传递的值,我的问题是:
1.例如,如果用户选择不按 Flag 过滤,那么他在该组合框中选择选项 All ,如何将其应用于上述 linq 查询
2.一般来说,如果用户想通过组合框中的值进行过滤,而该组合框中没有数据库中的对等值,该怎么做(如 1 中的所有选项或选项的反转)
注意:我尝试添加语句 [_subsystemRptPanelViewModel.SelectedMS != "All"] 如果用户选择了所有选择但在一个组合框中选择 All 选项时,结果是一个空查询,以排除实现过滤器结果。
【问题讨论】:
-
我不确定您的第二个问题是什么意思 - 如果用户搜索不在数据库中的值,那么将返回哪些结果?
-
@stuartd 抱歉不够清楚,我的意思是,例如,如果您的婚姻状态字段包含以下选项:单身、已婚、离婚,您可以通过数据库中存在的这些选项之一进行过滤,或者您可能根本不想按此字段进行过滤,因此您选择组合框中存在的所有选项,但它不是数据库中的选择,或者您可能希望按(未离婚)人员进行过滤,这也可能是一个选项在组合框中,但不是数据库中的选择