Umbraco 7 LINQ 按日期范围过滤模型子项

Umbraco 7 LINQ to filter Model children on date range

我在 Umbraco 7 中收集了跨越多年的文章,想编写一个简单的 LINQ 查询来获取当年的项目:

var press =  Model.Content.Children.Where(w => Convert.ToDateTime(w.GetPropertyValue("publicationDate")) >= new Date(1,1,2018));

这会导致错误:

Delegate 'System.Func' does not take 1 arguments.

我正在考虑将数据添加到 T 列表中 - 除非有人可以通过过滤 Umbraco 内容节点来引导我朝着正确的方向前进?

提前致谢。

我觉得这样的东西对我来说更 "correct",但它未经测试。需要注意的一件事是我确保直接从 Umbraco 获取 属性 作为 DateTime 的方式。而且我认为将它与 DateTime 而不是 Date 进行比较可能会有所不同。

var press =  Model.Content.Children.Where(w => w.GetPropertyValue<DateTime>("publicationDate") >= new DateTime(2018,1,1));

您的问题是您使用的是 Date 而不是 DateTimeDate 不是标准的 .NET 类型 - 它很可能来自您在项目中引用的其他 DLL。

这意味着它无法与 DateTime 相提并论,后者是您从 Umbraco 获取数据时要转换成的数据类型(也是我们在 Umbraco 内部用来存储日期的类型)。

如其他答案中所述,您还应该使用 .GetPropertyValue<DateTime>() 方法让 Umbraco 为您完成转换。它会稍微简化您的代码。

除此之外 - 如果您将查询更改为使用 DateTime 而不是 Date,您的查询就可以正常工作 - 我刚刚验证了自己。

考虑先将日期放入变量中,以避免在 Where:

中实例化 DateTime 的新实例
var currentYear = new DateTime(2018, 1, 1);
var press =  Model.Content.Children.Where(x => x.GetPropertyValue<DateTime>("publicationDate") > currentYear);

// or your way:
var press =  Model.Content.Children.Where(w => Convert.ToDateTime(w.GetPropertyValue("publicationDate")) >= date);