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

本文关键字:三元 运算符 Lambda 表达式 | 更新日期: 2023-09-27 18:23:42

这是我的代码:

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);

我得到以下编译错误:

"System.Nullable"answers"bool"之间没有隐式转换

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

如果我不能使用这种三元语法,那么我将被要求从数据库中获得DataObjects的完整列表,然后遍历该列表,在我进行操作时创建筛选列表(那些日期晚于当前月份第一个的对象)。

简而言之,我的目标是:我想获得本月1日之后发生的所有对象。dateCreated字段从不为null。dateClosed有时为null。dateClosed更准确,我想尽可能多地在那个日期进行比较,但如果dateClosed为null,则需要回到dateCreated。

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

提前感谢!

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

....Where(x => x.dateCreated == null ? x.dateCreated : x.dateClosed > firstOfMonth);

谓词必须求出为bool。您的x.dateCreatedDateTime?(假设)。你必须在真正的部分做一些计算为true/false的事情。

以下内容应该可以编译它,但仅作为一个示例。我不确定你的实际逻辑应该是什么,因为你说dateCreated从来都不是null,但你检查的是null。只需注意,这些值的计算结果都是真/假值。

....Where(x => x.dateCreated == null ? 
                       x.dateCreated.HasValue :
                       x.dateClosed > firstOfMonth);

虽然我相信@TyCobb发布了您遇到问题的正确原因,但我不确定他的回答是否会给您提供您想要的查询。你似乎想得到一个日期,并将其与firstOfMonth进行比较?

如果是这样的话,我想你可能想要这样的东西:

var objectsAfterFirstOfThisMonth= _context.DataObjects
    .Where(x => (x.dateCreated != null ? x.dateCreated.Value : x.dateClosed) > firstOfMonth);