我有以下内容:
new ObservableCollection<SomeData>(SomeDataCollection.Where(a => a.AGD_Category.Equals((int)AGD_CategoryEnum.Med) && ((a.AGG_DateStart.Date <= SelectedUntill) && (a.AGG_DateEnd.Value.Date >= SelectedFrom))));
Run Code Online (Sandbox Code Playgroud)
现在我的a.AGG_DateEnd是一个可以为空的日期时间,只要列表中有空值,我就会因为"a.AGG_DateEnd.Value.Date"部分而得到异常.
但问题是,a.AGG_DateEnd还包含小时和分钟,但我不希望这导致我的比较给出不可靠的结果.
我该怎么做才能改善?
谢谢,
Jep*_*sen 15
一个快速的黑客是:
a.AGG_DateEnd.GetValueOrDefault().Date >= SelectedFrom
Run Code Online (Sandbox Code Playgroud)
这是可以的,因为default(DateTime)
(等于它自己的.Date
)不大于任何(其他)DateTime
值.
否则通常要做的是:
a.AGG_DateEnd.HasValue && a.AGG_DateEnd.Value.Date >= SelectedFrom
Run Code Online (Sandbox Code Playgroud)
双重&
确保快捷评估.
评论后补充:
如果你想要相反的答案null
,那就是:
(a.AGG_DateEnd ?? DateTime.MaxValue).Date >= SelectedFrom
Run Code Online (Sandbox Code Playgroud)
分别:
!a.AGG_DateEnd.HasValue || a.AGG_DateEnd.Value.Date >= SelectedFrom
Run Code Online (Sandbox Code Playgroud)
稍后编辑:自C#6.0(2015年7月)以来,您可以使用?.
运算符.所以使用更短的代码:
a.AGG_DateEnd?.Date >= SelectedFrom
Run Code Online (Sandbox Code Playgroud)
这将(正式地,至少)比较两个可以为类型的可空值DateTime?
.当任一操作数为"null"(即.HasValue
给出false
)时,这样的比较给出false
.
如果你想在null的情况下得到相反的bool结果,那就是:
!(a.AGG_DateEnd?.Date < SelectedFrom)
Run Code Online (Sandbox Code Playgroud)
观察如何x >= y
不同于!(x < y)
当我们使用这些解除上运行运营商Nullable<>
值.任何提升运算符(如>=
或<
)将返回false
如果立即之一x
,并y
为空; 仅当x
与y
非空,他们将展开,并与非提升运算符,其返回值将被用来进行比较的内容.
归档时间: |
|
查看次数: |
9003 次 |
最近记录: |