我在Umbraco 7中收集了跨越多年的文章,并想编写一个简单的LINQ查询来获取当年的项目:
var press = Model.Content.Children.Where(w => Convert.ToDateTime(w.GetPropertyValue("publicationDate")) >= new Date(1,1,2018));
这将导致错误:
代理'System.Func'不接受1个参数。
我正在考虑仅将数据捆绑在T列表中-除非有人可以通过对Umbraco内容节点进行过滤将我引向正确的方向?
谢谢。
答案 0 :(得分:3)
我在想像这样的东西对我来说看起来更“正确”,但是未经测试。需要注意的一件事是,我确保直接从Umbraco将该属性获取为DateTime的方式。而且我还想将它与DateTime而不是Date进行比较可能会有所不同。
var press = Model.Content.Children.Where(w => w.GetPropertyValue<DateTime>("publicationDate") >= new DateTime(2018,1,1));
答案 1 :(得分:1)
您的问题是您使用的是Date
而不是DateTime
。 Date
不是标准的.NET类型-它很可能来自您在项目中引用的其他DLL。
这意味着它与DateTime
不具有可比性,后者是从Umbraco提取数据时要转换为的数据类型(也是我们在Umbraco内部存储日期的类型)。
如另一个答案中所述,您还应该使用.GetPropertyValue<DateTime>()
方法来让Umbraco为您完成转换。这样会简化您的代码。
除此之外-如果您只是将查询更改为使用DateTime
而不是Date
,那么您的查询就可以正常工作-我已经验证了自己。
请考虑将日期首先放在变量中,以避免在DateTime
内实例化Where
的新实例:
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);