列出<igroup>自定义排序c#</igroup>

时间:2011-05-10 00:26:26

标签: c# .net-3.5 repeater

我正在尝试在选项卡式布局中呈现搜索结果页面(将类别作为选项卡)。如何确保标签顺序为产品,文章和视频?现在它总是按字母顺序打印(因为我认为有秩序的方法)。我是创建自定义排序/比较的新手。谢谢!

protected void ResultsRedendering(List<Item> searchResult)
    {
        _searchResults = searchResult.GroupBy(i => i.TemplateName).OrderBy(p=>p.Key).ToList();
        _searchResults.RemoveAll(i => i.Key != "Product" && i.Key != "Article" && i.Key != "Video");
        rptResultTab.DataSource = _searchResults;
        rptResultTab.DataBind();
    }

这是我的项目模板呈现每个标签的方式......

<ItemTemplate>
            <li><a href="#<%#((IGrouping<string , Item>)Container.DataItem).Key %>">
                <%#((IGrouping<string, Item>)Container.DataItem).Key)%></a></li>
</ItemTemplate>

此外,_searchResult的类型为List<IGrouping<string,Item>>

2 个答案:

答案 0 :(得分:1)

虽然可能不是100%最佳,但这应该有效。

 protected void ResultsRedendering(List<Item> searchResult)
            {
                var _searchResults = searchResult
                 .OrderBy(o => o.Key == "Product" ? 1 : o.Key== "Article" ? 2 : 3});
                var rptResultTab.DataSource = _searchResults;
                rptResultTab.DataBind();
            }

答案 1 :(得分:1)

您可以制作单独的类别列表,以便更轻松地使用它们:

var products = searchResult.Where(sr => sr.Key == "Product");
var articles = searchResult.Where(sr => sr.Key == "Article");
var videos = searchResult.Where(sr => sr.Key == "Video");

我不清楚你如何准确地设置DataBinding,所以这就是我现在真正推荐的。如果您添加更多信息,我可以进一步提供帮助。