这是我的代码:
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订购数据,然后按投诉的名称订购数据。
答案 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();
由于这会返回不同的列表,我建议使用不同的变量来避免变异状态。