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

标签 c# datetime lambda 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);

我得到以下编译错误:

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/

相关文章:

Python Timenow 没有毫秒?

c++ - std::bind 到局部变量作为值

c# - 使用 lambda 语法覆盖

c# - 如何在 Entity Framework Code First 中加密数据?

c# - 具有可调整图 block 大小的 WinRT Gridview

c# - 从枚举中获取 DescriptionAttribute

c# - 使用 C# 的 GRPC 和来自服务器的流式响应导致错误 : 'Shutdown has already been called'

php - 如何在php中将日期和时间转换为时间戳?

javascript - 正在加载文件名中包含今天日期的 XML 文件...如果不存在具有今天日期的文件,则需要回退到旧文件

java - 捕获 lambda 表达式的池