这是我的代码:
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'之间没有隐式转换。和' bool'
我不太了解lambda语法,足以理解这个错误。
如果我无法使用这种三元语法,那么我将需要从数据库中获取完整的DataObjects列表,然后遍历此列表,创建过滤列表(日期晚于当月第一个的那些对象)我走了。
我的目标简而言之:我希望获得本月第一天之后发生的所有物品。 dateCreated字段永远不为null。 dateClosed有时为null。 dateClosed更准确,我希望尽可能在该日期进行比较,但是如果dateClosed为null,则需要回溯到dateCreated。
如果我需要提供更多信息,请与我们联系。
提前致谢!
答案 0 :(得分:4)
....Where(x => x.dateCreated == null ? x.dateCreated : x.dateClosed > firstOfMonth);
谓词必须评估为bool
。您的x.dateCreated
是DateTime?
(假设)。您必须在评估为true/false
的真实部分中执行某些操作。
以下内容应该让它进行编译,但仅作为示例。我不确定你的实际逻辑应该是什么,因为你说dateCreated
永远不会为null,但是你正在检查null。请注意,这些都评估为真/假值。
....Where(x => x.dateCreated == null ?
x.dateCreated.HasValue :
x.dateClosed > firstOfMonth);
答案 1 :(得分:3)
虽然我相信@TyCobb发布了您遇到问题的正确理由,但我不确定他的答案会给您提供您正在寻找的查询。您似乎想要获取日期并将其与firstOfMonth
进行比较?
如果是这样,我想你可能想要这样的东西:
var objectsAfterFirstOfThisMonth= _context.DataObjects
.Where(x => (x.dateCreated != null ? x.dateCreated.Value : x.dateClosed) > firstOfMonth);