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
而不是 DateTime
。 Date
不是标准的 .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);
我在 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
而不是 DateTime
。 Date
不是标准的 .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);