2011-12-06 30 views
0

我有以下代碼:通過匿名類型的日期屬性排序對象的好方法?

var resultArticles = from a in articleItems 

select new 
{ 
    Title = a.Title, 
    ArticleDate = a[Constants.FieldNames.ArticleStartDate] != null ? 
    ((DateTime)a[Constants.FieldNames.ArticleStartDate]).ToString(Constants.Date.Format): string.Empty, 
    ByLine = a[Constants.FieldNames.Byline], 
    FileRef = SPUtility.ConcatUrls(web.Url, a.Url) 
}; 

var sortedArticles = resultArticles.OrderBy(a => a.ArticleDate).ToList(); 

rptArticles.DataSource = sortedArticles; 
rptArticles.DataBind(); 

我想必須有一個更好的辦法來這裏排序/順序,因爲如果我有時間(DD/MM/YYY)

12.01.2011 
11.02.2011 
10.02.2011 
13.01.2011 
08.02.2011 

它只排序按天及以下不坐一個月考慮這樣的結果sortedArticles是:

08.01.2011 
10.02.2011 
11.02.2011 
12.01.2011 
13.01.2011 

我明明想首先顯示最新的文章,即11.02.2011

有什麼建議嗎?

在此先感謝。

+0

您可以訂購'var resultArticles = from articleItems',然後創建您的匿名對象嗎? –

回答

0

問題是,在您的選擇中,您在日期字段中調用ToString。結果ArticleDate被預測爲字符串。這就是爲什麼它沒有正確排序。

投影ArticleDate作爲一個可空日期可能是你最好的選擇

var resultArticles = from a in articleItems 
select new 
{ 
    Title = a.Title, 
    ArticleDate = a[Constants.FieldNames.ArticleStartDate] != null ? 
    ((DateTime)a[Constants.FieldNames.ArticleStartDate]) : default(DateTime?), 
    ByLine = a[Constants.FieldNames.Byline], 
    FileRef = SPUtility.ConcatUrls(web.Url, a.Url) 
}; 

而且,像這樣簡單的東西,你可以用更簡潔的「點號」

var resultArticles = articleItems.Select(a => new { 
    Title = a.Title, 
    ArticleDate = a[Constants.FieldNames.ArticleStartDate] != null ? 
    ((DateTime)a[Constants.FieldNames.ArticleStartDate]) : default(DateTime?), 
    ByLine = a[Constants.FieldNames.Byline], 
    FileRef = SPUtility.ConcatUrls(web.Url, a.Url) 
}; 

在這點,你可以通過ArticleDate對這個集合進行分類,它將被存儲爲真實日期,而不是字符串

resultArticles.OrderBy(a => a.ArticleDate).ToList(); 
+0

感謝您的這一點,我仍然需要以自定義格式dd.mm.yyyy提供日期 - 這是我第一次嘗試使用.ToString() – user997685

+0

@ user997685的唯一原因 - 你可以**提供**但是你需要,你只需要**將它作爲一個實際的日期存儲。 –

+0

@ user997685 - 所以無論何時您將它顯示給用戶,**當您調用ToString(CustomFormat)時,這就是**。 –

0

使用以下語法

var q = from el in dataSource orderby el.SortField select new { 
    //your projection 
}; 

這裏的關鍵是在一個查詢的選擇過程中進行排序。

編輯

通過使用你這個語句排序實際DateTime和項目字符串表示。