使用Razor LINQ .Where()查找具有特定日期值的umbraco节点

我正在重写一个XSLT宏来显示当前页面的子节点,具体取决于为’month’和’year’设置的查询字符串变量。 这用于显示特定时期的文章的新闻列表页面。

在旧的宏中,我循环并选择“newsDate”属性的月份部分(这是一个datepicker字段)并将它们分配给nodelist变量的节点。 $ Displaymonth是从查询字符串中收集的。

      

我在使用razor语法创建类似的节点列表时遇到问题。 假设查询字符串是八月,我尝试过类似的事情

 Model.Children.Where(umbraco.library.FormatDateTime(newsDate,'M') + " == 8"); Model.Children.Where("Convert.ToDateTime(newsDate).Month == \"8\""); Model.Children.Where("newsDate.Month == \"8\""); Model.Children.Where("newsDate.Value.Month == \"8\""); Model.Children.Where(i=>Convert.ToDateTime(i.GetProperty("newsDate").Value).Month==8)) 

调试错误主要是抱怨我的newsDate变量中没有属性“month”。 或者“类型’Func`2’中没有属性或字段日期”。 它似乎将我的Datepicker属性视为字符串,无论我做什么,如此处所述,但我使用的是最新版本的umbraco。

如何通过转换datepicker属性(Umbraco中的DateTime对象)的月份/年份并将其与变量进行比较来查找子项? 如何在.Where语句中获取此日期属性并提取月/年?

注意:这种forms的LINQ语法是umbraco DynamicNode对象所特有的(来自about umbraco v4.7.1)

如果您使用值字典,其中字典中的项目是DateTime类型,并且您要比较的属性是日期属性,那么执行某些类型强制,您将获得所需的function,这是我如何完成的它:

 var values = new Dictionary(); values.Add("queryStartDate", DateTime.Parse(Request["queryStartDate"])) ; values.Add("queryEndDate", DateTime.Parse(Request["queryEndDate"])) ; var results = Model.Children.Where("newsDate > queryStartDate && newsDate < queryEndDate", values); 

如果你想使用Linq Where子句,你可以这样做: CurrentModel.ChildrenAsList.Where(...) (所以不是Model而是CurrentModel ……它在visual studio中也更容易,给你intellisense;))