2016-07-22 10 views
0

複数の値を並べ替える必要があります。データはMongoDbデータベースからのもので、C#から読み込みます。私が最初に456最初に、そしてNew状況、そして日付の降順をOwnerIdに表示する必要がC#複数の値で並べ替え

SAMPLE

Unsorted    
OwnerId  Status  Date 
123   New   2016-01-01 
456   New   2016-01-01 
789   New   2016-01-06 
123   New   2016-01-05 
456   Qualified 2016-01-05 
789   Converted 2016-01-01 
123   Qualified 2016-01-02 

Expected 
OwnerId  Status  Date 
123   New   2016-01-05 
123   New   2016-01-01 
123   Qualified 2016-01-02 
789   New   2016-01-06 
456   New   2016-01-01 
456   Qualified 2016-01-05 
789   Converted 2016-01-01 

オーナーIDはです。動的値:これは私のアプリで私の現在認証されたユーザーです。私はどこからでもこの価値にアクセスすることはできません。 OwnerIdの値の型は、実際のGUIDです。

私は成功せず、これを試してみてください。 c# How to sort a sorted list by its value column1

C# List<> Sort by x then y2

私は私の問題は十分に理解願っています。もっと詳しく聞くことをためらってください。 ありがとうございます。

編集:

これはmongoで直接行うことはできません。私はC#ソリューションが必要です。

+0

あなたはmongoクエリで答えが欲しいですか?あなたの質問に「mongodb」とタグ付けしたので、私は尋ねています。また、あなたが与えた質問は、mongoのクエリとは関係ありません。 – Shrabanee

+0

MongoまたはC# – Karine

+0

mongodbを使用すると1つのクエリが役に立ちますが、 'ownerId - 456と789'にも同じソートが適用されます。そのような結果を得るのは大丈夫ですか?」 – Shrabanee

答えて

0

あなたは、このクエリを使用して並べ替えることができます。

db.<people>.sort({ OwnerId : 0, Date : 1 }) 

あなたはMongoDBのクライアントを使用してC#でこのクエリを変換する必要がありますか?

+0

このクエリは、質問に必要な出力を与えるには不十分です。答えを出す前に質問を読んで理解してください。 – Shrabanee

+0

LOL。たぶんあなたは解決策を見つけることができますhttp://stackoverflow.com/questions/2123529/how-to-specify-an-order-or-sort-using-the-c-sharp-driver-for-mongodb –

+0

それはソートされますか? 'status'フィールドも同様ですか?それは私が思うあなたの質問に欠けているものです。 – Shrabanee

0

はあなたの望ましい結果を得るために役立つことがあり、この文字列で検索してください: -

db.collName.find({findQuery}).sort({ 'OwnerId' : 1, 'Status':1, 'Date' : -1 }) 

クエリが最初OwnerIdのための昇順であなたのレコードをソートします。その後、値はstatusに基づいてソートされ、最後にDateフィールドの降順でソートされます。

今、あなたはすべてのあなたは、さまざまな方法でそれを使用する方法の詳細アイデアのために

参照sort-exampleをソートすると、あなたの希望する結果を取得する必要があります。あなたの要件に似た最後の例を見てください。

希望すると、これが役立ちます。

注: - レコードが多数ある場合は、クエリにも.limit()を使用してください。 docを参照してください。

+0

私は昇順にソートしたくありません。私は値に基づいて並べ替えをしたい。私の現在のユーザーがOwnerId 456であれば動作しません。ステータスは「Converted、New、Qualified」のようにソートされますが、最初に「New」が必要です – Karine

+0

Ok!その後、mongoのクエリはあなたを助けることができないようです。手動でのみ行う必要があります。私は 'C#'について何も知らないので、あなたを助けることはできません。 – Shrabanee

+1

よろしくお願いします。私は今、私はmongoでこれを達成することはできません知っている – Karine

0

あなたのデータセットはコピーされましたが、予想されるソート結果は特にOwnerIdプロパティではほとんどありません。それらが単にあったように列挙型とデータクラスを無視してください

public class GonnaSortThisData 
{ 
    public GonnaSortThisData() 
    { 
     User currentUser = new User 
     { 
      UserId = 123, 
      UserName = "UserMan" 
     }; 

     List<Data> dataValues = new List<Data> 
     { 
      new Data {OwnerId = 123, Status = Status.New, Date = DateTime.Parse(@"2016-01-01")}, 
      new Data {OwnerId = 456, Status = Status.New, Date = DateTime.Parse(@"2016-01-01")}, 
      new Data {OwnerId = 789, Status = Status.New, Date = DateTime.Parse(@"2016-01-06")}, 
      new Data {OwnerId = 123, Status = Status.New, Date = DateTime.Parse(@"2016-01-05")}, 
      new Data {OwnerId = 456, Status = Status.Qualified, Date = DateTime.Parse(@"2016-01-05")}, 
      new Data {OwnerId = 789, Status = Status.Converted, Date = DateTime.Parse(@"2016-01-01")}, 
      new Data {OwnerId = 123, Status = Status.Qualified, Date = DateTime.Parse(@"2016-01-02")} 
     }; 

     //var = List<Data> 
     var sortedValues = dataValues 
      .OrderByDescending(list => list.OwnerId == currentUser.UserId) 
      .ThenBy(list => list.Status) 
      .ThenByDescending(list => list.Date).ToList(); 
    } 
} 

public class User 
{ 
    public int UserId { get; set; } 
    public string UserName { get; set; } 
} 

public class Data 
{ 
    public dynamic OwnerId { get; set; } 
    public Status Status { get; set; } 
    public DateTime Date { get; set; } 
} 

public enum Status 
{ 
    New, Qualified, Converted 
} 

:しかし、コンソールアプリケーションの内部でこのコードを実行する(またはあなたが好むものは何でもテンプレート)、そしてこれらは、あなたが求めている結果であるなら、私に知らせてMongoDBデータベーステーブルから得られるレコードを表します。動的プロパティは、実行時にオンザフライでLINQによって解決されます。 ThenBy()への呼び出しを注意深く見てください。これは私が一番好きなLINQ拡張の1つですが、これはクエリ構文でこれを行うことができますが、メソッド構文を使用することにしました。

+0

私は動的値に応じてOwnerIdをソートする必要があります。最初に表示するには、456または123または789にすることができます。あなたのソリューションは123,456,789をソートします。それは私が期待しているものではない – Karine

+1

あなたの質問を少し誤解して申し訳ありません。私はあなたがタイプが文字通りOwnerIdのためにダイナミックであることを意味していたと思っていました。私はこのコメントに問題がありますが、 "OwnerIdは動的な値です。私のアプリでは私の現在の認証されたユーザーです。私はどこからでもこの値にアクセスすることはできません。私たちがプロパティにアクセスできない場合は、どのようにクエリを操作できると思いますか分かりません。先に進む前に、これらのタイプのドメインモデルを見る必要があると思います。 – BolletuH

関連する問題