0

これが私のコードです:

void Main() {
    List<Restaurant> RestaurantData = new List<Restaurant>();
}

class Restaurant {
    public int Id;
    public List<Complaint> ComplaintsList = new List<Complaints>();
}

class Complaint {
    public string Name;
    public string Address;
    public int Age;
    public DateTime ComplaintDate;
}

RestaurantData.OrderBy( x => x.ID, y => y.Complaint.Name).ToList();

その部分でエラーが発生しますy => y.Complaint.Name。誰かが理由を理解するのを手伝ってもらえますか?

データをレストラン ID で並べ替え、次に苦情の名前で並べ替えます。

4

3 に答える 3

11

Complaint編集後、最初に Restaurant.Id に基づいてリストを並べ替え、次に に基づいて内部リストを並べ替えたいようですName。以下はそれを行うべきです。

List<Restaurant> newListOfRestaurant
        = RestaurantData
             .OrderBy(x => x.Id)
             .Select(r => new Restaurant
                  {
                      Id = r.Id,
                      ComplaintsList = r.ComplaintsList
                                        .OrderBy(c => c.Name)
                                        .ToList()
                  })
              .ToList();

(古い回答)

Enumerable.ThenBy複数のフィールドで注文する場合に使用する必要があります。

キーに従って昇順でシーケンス内の要素の後続の順序付けを実行します。

RestaurantData  = RestaurantData.OrderBy( x => x.ID)
                                .ThenBy(y => y.Complaint.Name)
                                .ToList();

結果を に戻す必要がありますRestaurantData。そうしないと、既存のリストが変更されません。

于 2013-10-02T18:04:38.120 に答える
1

OrderBy はコレクションを変更しません。複数フィールドの並べ替えに ThenBy を使用する

RestaurantData = RestaurantData.OrderBy( x => x.ID)
                       .ThenBy(y => y.Complaint.Name).ToList();

OrderByは IOrderedEnumerable を返しています。OrderBy の詳細を参照してください。

于 2013-10-02T18:05:37.100 に答える
1

OrderBy単一のプロパティ式のみを受け入れます。ThenBy()複数のことを行うには、他のプロパティ式を使用する必要があります。行う、

 var restaurantsByIdThenByComplaintName = 
     RestaurantData
           .OrderBy(restaurant => restaurant.ID)
           .ThenBy(restaurant => restaurant.Complaint.Name)
           .ToList();

これは別のリストを返すため、状態の変化を避けるために別の変数を使用することをお勧めします。

于 2013-10-02T18:06:26.383 に答える