c# - 过滤列表中的可为空项 - LINQ
问题描述
为了显示,我有以下列表项。我可以想象下面的小列表,可能是数百行。StartDate
也EndDate
可以是nullable
,如果EndDate
为null,则表示课程仍然开放。
CourseId ClassName StartDate EndDate isActiveinDB
-------- --------- --------- ------- ------------
12321 Math 08-25-2017 12-02-2017 Y
32342 Math 08-25-2017 12-02-2017 N
25325 Math 01-25-2018 - Y
如果我通过以下方法通过今天日期(06-06-2018),它会返回我所有课程,而不仅仅是最后一门课程(数学 25325),它基于isActiveinDB
.
我想知道以下实现有什么不正确的。
public List<Courses> GetClassesByDate( DateTime date, List<Courses> allCourses)
{
List<Courses> courses = allCourses.Where( x => x.StartDate.HasValue ? x.StartDate <= date : true
&& x.EndDate.HasValue ? x.EndDate.Value >= date : true
&& x.isActiveinDB.Equals("Y")).ToList();
return courses;
}
感谢@DavidG,实现在以下链接中
解决方案
尝试(如果StartDate
可以为空,如您所说):
List<Courses> courses = allCourses.Where( x =>
(x.StartDate.HasValue ? x.StartDate.Value <= date : true)
&& (x.EndDate.HasValue ? x.EndDate.Value >= date : true)
&& x.isActiveinDB.Equals("Y")).ToList();
你看到()
我添加的了吗?我觉得你正在做的实际上是
x.EndDate.HasValue ? x.EndDate.Value : (true && isActiveinDB.Equals("Y"))
你看?true
不是单个值,而是一个子表达式true && isActiveinDB.Equals("Y")
推荐阅读
- c++ - 满足中断条件后循环继续
- kotlin - 在 Kotlin 中通过委托实现对象
- typescript - TypeScript 编译器无法识别定义文件
- julia - 如何在 Julia 中进行多行注释?
- vue.js - Vue JS:将道具的值保存在组件中
- c# - 蓝牙 LE - 特征值只读一次
- vue.js - Nuxt 2.14 通用模式下的 target: 'static' 和 target: 'server' 之间的真正区别是什么?
- dpdk - 如何修复 DPDK 大型内存池的分段错误?
- mongodb - 无法通过 .NET mongoDB 驱动程序创建分片集合
- square-connect - 退款发票API支持按平方