2011-12-08 69 views
0

我有以下代碼:手動使用匿名類型對對象進行排序?

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

我將永遠有最多三個項目,但可能會少一些。 標題將始終是(簡體)美國,歐洲或非洲

我需要做的就是對它們進行排序而不是按字母順序之前我數據綁定將它們添加到中繼器

我需要顯示的順序in是

europe 
africa 
america 

我該如何做到這一點?

在此先感謝。

回答

1

你可以爲了用標題的位置,你在字典中存儲項目:

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

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

非常好,謝謝 – user997685

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