linq-select 具有所有条件的行

Posted

技术标签:

【中文标题】linq-select 具有所有条件的行【英文标题】:linq-select rows that have all the conditions 【发布时间】:2021-10-04 15:20:36 【问题描述】:

我有一个包含多个下拉列表的搜索表单。 您不需要为搜索操作填写所有下拉列表 其中一些下拉列表可以为空。 但是,如果我将其中一些下拉列表留空,它将不会返回任何结果。 但是,如果所有的下拉列表都被填满,结果将是正确的 这是我在操作方法中使用的代码:

CurrentCourseModels = repository.SelectCourses()
.Where(x =>(( x.EducationGroupID==null || x.EducationGroupID == eID)
&& (x.CourseNameID==null|| x.CourseNameID == nID))).ToList();

在此代码中,如果我同时选择 EducationGroupID 和 CourseNameID,结果将是正确的。 但如果我只搜索 EducationGroupID 将没有结果。 谢谢你的帮助

【问题讨论】:

也许您的意思是检查 eID 和 nID 是否为空,而不是数据库中的值(它永远不应该为空,因为它是键)。 (nID == null || x.CourseNameID == nID) 【参考方案1】:

如果您只想在有相关过滤器值时进行过滤,那么您可以通过多个语句组合查询:

CurrentCourseModels = repository.SelectCourses();
if (eID != default)
    CurrentCourseModels = CurrentCourseModels.Where(x => x.EducationGroupID == eID);
if (nID != default)
    CurrentCourseModels = CurrentCourseModels.Where(x => x.CourseNameID == nID);

按顺序添加Where 子句相当于使用&& 将它们拼接在一起,这样您就可以根据需要添加额外的子句。

【讨论】:

以上是关于linq-select 具有所有条件的行的主要内容,如果未能解决你的问题,请参考以下文章

SQL 排除匹配所有多个条件的行

删除所有满足正则表达式条件的行

MYSQL检查所有行并满足条件

返回具有所有外键的行

SQL - 选择所有不匹配空行的行

从具有不同值的行中选择所有值