3

コレクションを並べ替える必要があります。たとえば、私は

Austin 12/3/2012   
Sam 100 12/3/2012   
Sam 200 14/3/2012   
Bubly 300 12/3/2012   
Bubly 300 15/3/2012  
ram 100 13/3/2012 

ソート順が Name, datetime の場合、出力は次のようになります。

Austin 12/3/2012    
Bubly 12/3/2012   
Bubly 15/3/2012   
ram 13/3/2012    
sam 12/3/2012    
sam 14/3/2012  

ソート順が Datetime 、 Name の場合は、次のようになります

12/3/2012 austin
12/3/2012 bubly
12/3/2012 sam
13/3/2012 ram
14/3/2012 sam
15/3/2012 bubly 

それに応じて他のアイテム。これを行うにはどうすればよいですか? 並べ替えのために列の順序を取得するにはどうすればよいですか。

4

4 に答える 4

6

OrderByを使用した後、Linq 関数ThenByを使用して、さらに並べ替えを実行できます。

listOfRecords.OrderBy(p => p.Name).ThenBy(p => p.Date)
于 2013-09-06T07:45:52.127 に答える
4

まず、次の 2 つの関数を作成します。

var SortByDate=(p=>p.Date);
var SortByName=(p=>p.Name);

次に、たとえば、2つを含むリストがあります

var SortDimensions=new List<object>({SortByDate,SortByName});

次に、最初の日付で並べ替えたい場合は、次のように名前を付けます。

myList.OrderBy(SortDimensions[0]).ThenBy(SortDimensions[1]);

さて、ここがトリッキーな部分です。最初に名前で並べ替え、次に日付で並べ替えたい場合は、SortDimensionsList 内の関数の順序を変更するだけです。

SortDimensions.Remove(SortByName);
SortDimensions.Insert(0,SortByName);

このように、同じ OrderBy ステートメントでも異なる結果が得られます。

PS。確かに、コンパイラ エラーを回避するために SortDimensions コレクション以外のものを使用する必要がある場合があるため、これは疑似コードにかなり近いですがList<object>、現時点では IDE にアクセスできませんが、答えの精神は同じままです。 . コレクションを作成し、その中にデリゲート関数を格納してから、コレクション内の順序を変更して、同じ汎用コードを使用して異なる並べ替え次元を実現します。

于 2013-09-06T08:35:34.397 に答える
4

このようなもの:

yourList.OrderBy(o => o.DateTime).ThenBy(o => o.Number);
于 2013-09-06T07:45:55.590 に答える
0

あなたの情報を保持するクラスを作成します

public class NameDate
{
    private string name;
    private DateTime date;
    public string Name
    {
        get { return name; }
        set { name = value; }
    }
    public DateTime Date
    {
        get { return date; }
        set { date = value; }
    }
}

次にList<NameDate>、アイテムを保持するために a を設定します。これが完了したら、LINQ を使用してアイテムを並べ替えることができます

List<NameDate> someList = new List<NameDate>();
someList = GetNameDateList();
var orderedByNameList = someList.OrderBy(e => e.Name);
var orderedByDateTimeList = someList.OrderBy(e => e.Date);

これが役立つことを願っています。

于 2013-09-06T07:49:00.710 に答える