手动排序具有匿名类型的对象?

时间:2011-12-08 03:26:09

标签: c# asp.net

我有以下代码:

var categories = catList.Select(c => new
{
      Title = c.Web.Title,
      Byline = c[Constants.FieldNames.Byline],
      Url = c[SPBuiltInFieldId.FileRef]
});

我总是会有最多三件物品,但可能会少一些。 标题将始终(简化)美国,欧洲或非洲

我需要做的是在将数据绑定添加到转发器之前对它们进行排序,但不按字母顺序排序

我需要显示它们的顺序是

europe
africa
america

我怎样才能做到这一点?

提前感谢。

2 个答案:

答案 0 :(得分:1)

您可以按照存储在字典中的标题位置订购商品:

var position = new Dictionary<string, int>
{
    { "Europe", 0 },
    { "Africa", 1 },
    { "America", 2 },
};

var categories = catList.Select(c => new ...);
                        .OrderBy(x => position[x.Title]);

答案 1 :(得分:0)

您可以通过为每个标题分配相应的订单号来执行此类操作:

var catOrder = new Dictionary<string,int>
{
    { "europe", 1 },
    { "africa", 2 },
    { "america", 3 }
};

var catList = new[] { "america", "europe", "africa" };

var categories =
    catList.Select(c => new { Title = c })
    .OrderBy(c => catOrder[c.Title]);

// result: europe, africa, america

如果比较更复杂,请创建一个实现IComparer的类,其中包含您的排序逻辑,并将其传递给OrderBy()