2016-06-29 5 views
1

このようなシンプルなモデルをもっているように思われます。ここでは、1つの列が3文字の文字列として "月"です。私たちは月、リストを月単位でソートする単純なLINQメソッドはありますか?

query.OrderByのようなLINQ文でそのモデルをソートしたい場合

public class SampleModel 
{    
    public int ID { get; set; } 
    public string Column1 { get; set; } 
    public string Month { get; set; } 
    public string Column2 { get; set; } 
} 

(M => m.Month)以下のアルファベット順のソートを生成する

Monthは文字列であるためです。

シンプルに並べ替える方法はありますかMonth年代順?

Sample table

+2

これは、不完全なトークンの日付文字列として日付データを格納しないための素晴らしい理由です。 –

+0

これが私が与えられたものであり、私が働くことが期待されるものを除きます。現実は毎回理想を超えています。 –

答えて

4

あなたは、ルックアップテーブル/辞書、またはそのことについては、列挙型のデータを格納することによって、それを行うことができます。これは、LINQ to Objectsを使用していて、LINQを基にした派手な式ではありません。

このソリューションは、数ヶ月だけでなく、他の種類のデータにも適しています。

+0

これは興味深いアプローチです。ですから、1月以外の月(例えば8月)から始まる年代順のシーケンスを実行したい場合、私は8月から7月のソートをこのように行うことができますか? –

+0

@Rubix_あなたはとにかくそれを制御できます。 –

+0

これはその汎用性のため、答えとしてマークします。 –

3

あなたはDateTimeMonth部分を解析し、その後のようなOrderByを使用することができます。このようにパースで

var orderedCollection = list.OrderBy(r => 
        DateTime.ParseExact(r.Month, "MMM", CultureInfo.InvariantCulture)); 

、日、年の部分は、現在の日付に選択されます。それはあなたの並べ替えには関係ありません

+0

1月から年代順にソートしたい場合は非常に簡単です。 +1 –

関連する問題