在 Lambda 表达式中使用三元运算符

Bri*_*ian 3 c# lambda datetime boolean ternary-operator

这是我的代码:

var now = DateTime.Now;
var firstOfMonth = new DateTime(now.Year, now.Month, 1, 0, 0, 1);

var objectsAfterFirstOfThisMonth= _context.DataObjects
    .Where(x => x.dateClosed == null ? x.dateClosed : x.dateCreated > firstOfMonth);
Run Code Online (Sandbox Code Playgroud)

我收到以下编译错误:

“System.Nullable”和“bool”之间没有隐式转换

我对 lambda 语法的理解不足以理解此错误。

如果我无法使用此三元语法,那么我将需要从数据库获取 DataObjects 的完整列表,然后迭代此列表,创建过滤列表(日期晚于当月第一天的那些对象),因为我去。

简而言之,我的目标是:我想获取本月第一天之后发生的所有对象。dateCreated 字段永远不为空。dateClosed 有时为空。dateClosed 更准确​​,我想尽可能多地比较该日期,但需要依靠 dateCreated 以防 dateClosed 为空。

如果我需要提供更多信息,请告诉我。

提前致谢!

TyC*_*obb 6

....Where(x => x.dateCreated == null ? x.dateCreated : x.dateClosed > firstOfMonth);
Run Code Online (Sandbox Code Playgroud)

谓词必须求值为 a bool。你的x.dateCreated是一个DateTime?(假设)。你必须在 true 部分做一些计算结果为 a 的事情true/false

像下面这样的东西应该可以编译,但仅作为示例。我不确定你的实际逻辑应该是什么,因为你说dateCreated永远不会为空,但你正在检查空。请注意,这些都评估为真/假值。

....Where(x => x.dateCreated == null ? 
                       x.dateCreated.HasValue :
                       x.dateClosed > firstOfMonth);
Run Code Online (Sandbox Code Playgroud)