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

编辑后,您似乎想首先根据 Restaurant.Id 订购列表,然后您想订购Complaint基于的内部列表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 回答