如何在多个字段的数据中使用OrderBy?

时间:2013-10-02 18:04:00

标签: c# linq

这是我的代码:

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订购数据,然后按投诉的名称订购数据。

3 个答案:

答案 0 :(得分: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,否则不会修改现有列表。

答案 1 :(得分:1)

OrderBy不修改集合!使用ThenBy进行多字段排序

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

OrderBy正在撤销IOrderedEnumerable,请阅读有关OrderBy

的更多信息

答案 2 :(得分:1)

OrderBy只接受一个属性表达式。要执行多个属性表达式,您必须ThenBy()。做,

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

由于这会返回不同的列表,我建议使用不同的变量来避免变异状态。