2011-08-05 9 views
3

現在、私は現在のページの子ノードを表示するためにXerTマクロを書き換えています。 'これは、一定期間記事を表示するニュース一覧ページに使用されます。Razor LINQ .Where()を使用して特定の日付値を持つumbracノードを検索する

古いマクロでは、 "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> 

剃刀構文を使用して同様のノードリストを作成するのに問題があります。クエリ文字列の月と仮定すると8月で、私はほとんど私のnewsDate変数の内部には、プロパティ「月」がないと文句を言う

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)) 

デバッグエラーのようなものを試してみました。どちらか "または" Func`2 '"型のプロパティまたはフィールド日付がありません。 hereと記載されているように、自分のDatepickerプロパティを文字列として扱っているようですが、最新のバージョンのumbracoを使用しています。

datepickerプロパティ(UmbracoのDateTimeオブジェクト)の月/年を変換して変数と比較することで、子供を見つける方法を教えてください。 .Whereステートメントの中で、この日付プロパティを取得して月/年を抽出するにはどうすればよいですか?

+0

'Where'はラムダ式を受け入れているので、間違った構文を使用しています。調べる。 –

+0

また、C#には 'DatePicker'データ型がありませんので、' newDate'が何であるか分かりませんし、例を挙げることもできません。 –

+0

http://umbraco.com/follow-us/blog-archive/2011/3/1/umbraco-razor-feature-walkthrough-%E2%80%93-part-4 - "DynamicObject(DynamicNodeもあります。それは継承しています)、c#コンパイラ/ razorパーサーでは、おなじみのラムダ構文を使用してセットをフィルタリングすることはできません。 これは、メソッド連鎖を可能にするDynamicObject [DynamicNodeList]を返すためです。 – giles

答えて

8

注:この形式をLOMQの構文は、umbraco DynamicNodeオブジェクトに特有です(umbra 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); 
4

あなたはLINQのあなたがこれを行うことができ句を使用する場合:CurrentModel.ChildrenAsList.Where(...)(そうモデリングしかしCurrentModelない...それはあまりにもVisual Studioで簡単です、あなたはインテリセンス与え;))

関連する問題