Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 按创建日期发布的Sitecore排序_C#_Sorting_Sitecore_Datecreated - Fatal编程技术网

C# 按创建日期发布的Sitecore排序

C# 按创建日期发布的Sitecore排序,c#,sorting,sitecore,datecreated,C#,Sorting,Sitecore,Datecreated,我不知道如何根据项目的创建日期按降序对项目列表进行排序(我知道Sitecore允许按项目的创建日期按升序对项目进行排序)。我对Sitecore还是一个新手,所以我不知道该怎么做……任何建议都会很有帮助 Item[] BlogPosts = HomeItem.Axes.SelectItems(@"child::*[@@templatename='BlogComment']"); if (BlogPosts != null) {

我不知道如何根据项目的创建日期按降序对项目列表进行排序(我知道Sitecore允许按项目的创建日期按升序对项目进行排序)。我对Sitecore还是一个新手,所以我不知道该怎么做……任何建议都会很有帮助

 Item[] BlogPosts = HomeItem.Axes.SelectItems(@"child::*[@@templatename='BlogComment']");

            if (BlogPosts != null)
            {

                DataSet ds = new DataSet();
                DataTable posts = ds.Tables.Add("posts");

                posts.Columns.Add("PostName", Type.GetType("System.String"));
                posts.Columns.Add("DateCreated", Type.GetType("System.String"));
                posts.Columns.Add("PostComment", Type.GetType("System.String"));

                foreach(Item PostItem in BlogPosts)
                {
                    DataRow dr = posts.NewRow();

                    dr["PostName"] = PostItem.Fields["Name"].Value;
                    dr["DateCreated"] = PostItem.Statistics.Created;
                    dr["PostComment"] = PostItem.Fields["Comment"].Value;

                    posts.Rows.Add(dr);
                }
                commentsListRptr.DataSource = ds;//this is a repeater I'm using to show the data
                commentsListRptr.DataMember = "posts";
                commentsListRptr.DataBind();
            }

您可以使用LINQ对项目进行排序:

var items = Sitecore.Context.Database.SelectItems("/sitecore/content/home/*");
items = items.OrderBy(x => x[Sitecore.FieldIDs.Created]).Reverse();
显然,更改查询或项目列表以满足您的需求

编辑以下添加的代码:

在ascx中设置转发器,我们将使用Sitecore FieldRenderer,但在此控件中禁用Web编辑:

<asp:Repeater ID="rptBlogPosts" runat="server" OnItemDataBound="rptBlogPosts_ItemDataBound">
    <HeaderTemplate><table></HeaderTemplate>
    <ItemTemplate>
        <tr>
            <td><sc:FieldRenderer runat="server" ID="PostName" FieldName="Name" DisableWebEditing="True" /></td>
            <td><asp:Literal runat="server" ID="PostDate"></asp:Literal></td>
            <td><sc:FieldRenderer runat="server" ID="PostComment" FieldName="Comment" DisableWebEditing="True" /></td>
        </tr>
    </ItemTemplate>
    <FooterTemplate></table></FooterTemplate>
</asp:Repeater>

你的Sitecore查询在性能上可能非常昂贵,这取决于你有多少内容,你的内容树有多深,我不确定你使用的是哪个版本的Sitecore,但在任何情况下,你都会(用Lucene)为你的内容编制索引,并用它来检索帖子。如果您使用的是Sitecore 7,请查看这篇关于

的文章,您可以使用LINQ对项目进行排序:

var items = Sitecore.Context.Database.SelectItems("/sitecore/content/home/*");
items = items.OrderBy(x => x[Sitecore.FieldIDs.Created]).Reverse();
显然,更改查询或项目列表以满足您的需求

编辑以下添加的代码:

在ascx中设置转发器,我们将使用Sitecore FieldRenderer,但在此控件中禁用Web编辑:

<asp:Repeater ID="rptBlogPosts" runat="server" OnItemDataBound="rptBlogPosts_ItemDataBound">
    <HeaderTemplate><table></HeaderTemplate>
    <ItemTemplate>
        <tr>
            <td><sc:FieldRenderer runat="server" ID="PostName" FieldName="Name" DisableWebEditing="True" /></td>
            <td><asp:Literal runat="server" ID="PostDate"></asp:Literal></td>
            <td><sc:FieldRenderer runat="server" ID="PostComment" FieldName="Comment" DisableWebEditing="True" /></td>
        </tr>
    </ItemTemplate>
    <FooterTemplate></table></FooterTemplate>
</asp:Repeater>

你的Sitecore查询在性能上可能非常昂贵,这取决于你有多少内容,你的内容树有多深,我不确定你使用的是哪个版本的Sitecore,但在任何情况下,你都会(用Lucene)为你的内容编制索引,并用它来检索帖子。如果您使用的是Sitecore 7,请看一看这篇关于使用相同想法的文章,您还可以使用以下内容

var items = Sitecore.Context.Database.SelectItems("/sitecore/content/home/*").OrderByDescending(x => x.Statistics.Created);

它消除了一行额外的代码。

使用相同的思想,您还可以使用以下代码

var items = Sitecore.Context.Database.SelectItems("/sitecore/content/home/*").OrderByDescending(x => x.Statistics.Created);

它省去了一行额外的代码。

我喜欢这个想法,但我不知道如何让它适合我。我有一个数组列表的项目,我试图排序…我编辑了我的文章,包括一些样本代码@Saradeiro我更新了代码示例。您可能必须尝试使用/不使用
.Reverse()
,我记不起它是哪种方式…我喜欢这个想法,但我不确定如何让它适合我。我有一个数组列表的项目,我试图排序…我编辑了我的文章,包括一些样本代码@Saradeiro我更新了代码示例。您可能必须尝试使用/不使用
.Reverse()
,我记不起它是朝哪个方向转的。。。