这是我的代码:
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);
我得到以下编译错误:
There is no implicit conversion between 'System.Nullable' and 'bool'
我对 lambda 语法的了解不足以理解此错误。
如果我无法使用这种三元语法,那么我将需要从数据库中获取 DataObjects 的完整列表,然后遍历此列表,创建过滤列表(那些日期晚于当月第一天的对象)我去。
简而言之,我的目标是:我想获取本月第一天之后发生的所有对象。 dateCreated 字段永远不会为空。 dateClosed 有时为空。 dateClosed 更准确,我想尽可能多地在该日期进行比较,但如果 dateClosed 为空,则需要回退到 dateCreated。
如果我需要提供更多信息,请告诉我。
提前致谢!
最佳答案
....Where(x => x.dateCreated == null ? x.dateCreated : x.dateClosed > firstOfMonth);
谓词必须求值为 bool
。您的 x.dateCreated
是一个 DateTime?
(假设)。您必须在计算结果为 true/false
的 true 部分执行某些操作。
类似下面的内容应该可以编译,但仅作为示例。我不确定您的实际逻辑应该是什么,因为您说 dateCreated
永远不会为 null,但您正在检查 null。请注意,这些都评估为真/假值。
....Where(x => x.dateCreated == null ?
x.dateCreated.HasValue :
x.dateClosed > firstOfMonth);
关于c# - 在 Lambda 表达式中使用三元运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25924102/