加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 00:00:01 所属栏目:百科 来源:网络整理
导读:我目前正在重写一个XSLT宏来显示当前页面的子节点,具体取决于为’month’和’year’设置的查询字符串变量.这用于显示特定时期的文章的新闻列表页面. 在旧的宏中,我循环并选择“newsDate”属性的月份部分(这是一个datepicker字段)并将它们分配给nodelist变量
我目前正在重写一个XSLT宏来显示当前页面的子节点,具体取决于为’month’和’year’设置的查询字符串变量.这用于显示特定时期的文章的新闻列表页面.

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

<xsl:for-each select="$currentPage/*[@isDoc]">
          <xsl:sort order="descending" select="newsDate" data-type="text"/>
          <xsl:if test="umbraco.library:FormatDateTime(newsDate,'%M') = $displayMonth">
            <xsl:copy-of select="." />
          </xsl:if>
</xsl:for-each>

我使用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属性视为字符串,无论我做什么,如here所述,但我使用的是最新版本的umbraco.

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

解决方法

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读