C# 对对象列表进行排序每个对象都具有对象属性

C# 对对象列表进行排序每个对象都具有对象属性,c#,list,sorting,C#,List,Sorting,我有一个类型为的对象列表 } 我需要把名单分类 我可以动态地这样做吗 请提供帮助。LINQ有/种方法使这种排序变得微不足道,例如 var orderByBookingRef = listOfRestaurants.OrderBy(x => x.Booking.BookingRef); var orderByLatestBooking = listOfRestaurants.OrderByDescending(x => x.Booking.BookingDateTime); var o

我有一个类型为的对象列表 }

我需要把名单分类

我可以动态地这样做吗

请提供帮助。

LINQ有/种方法使这种排序变得微不足道,例如

var orderByBookingRef = listOfRestaurants.OrderBy(x => x.Booking.BookingRef);
var orderByLatestBooking = listOfRestaurants.OrderByDescending(x => x.Booking.BookingDateTime);
var orderByLatestReview = listOfRestaurants.OrderByDescending(x => x.RestReview.ReviewDate);
以上称为Lambda表达式,如果您更喜欢纯LINQ语法,它在可读性方面要好一点

var orderByBookingRef = from r in listOfRestaurants
                        orderby r.Booking.BookingRef
                        select r;
var orderByLatestBooking = from r in listOfRestaurants
                           orderby r.Booking.BookingDateTime descending
                           select r;
var orderByLatestReview = from r in listOfRestaurants
                          orderby r.RestReview.ReviewDate descending
                          select r;

以及linq的另一种形式:

var sorted_by_prop = 
        from some_object in list_of_rest
        orderby some_object.prop_name_here descending // or ignore descending if you don't want it descending
        select some_object;
具体情况下,假设您的列表名为
MyList
,由
RestaurantId
字段指定:

var sorted_list = 
        from rest in MyList
        orderby rest.Restaurant.RestaurantId
        select rest;
将以餐厅Id的升序返回列表


根据评论:你可以这样做

var sorted_list = 
        from rest in MyList
        where rest.Booking != null && // same for the rest
        orderby rest.Restaurant.RestaurantId
        select rest;

这样,它将跳过空的…

嗨,詹姆斯,谢谢你的回复。我已经尝试了第一个解决方案(lambda表达式)。我得到了这个错误“在调用方法之前检查以确定对象是否为null”。我使用了istOfRestaurants.OrderBy(x=>x.Booking.bookingf);出现上述错误是因为X将所有对象(Booking、Restaurant和RestaurantView)都设置为null。不知道为什么。嗨,詹姆斯,谢谢你的回复。我已经尝试了第一个解决方案(lambda表达式)。我得到了这个错误“在调用方法之前检查以确定对象是否为null”。我使用了istOfRestaurants.OrderBy(x=>x.Booking.bookingf);出现上述错误是因为X将所有对象(Booking、Restaurant和RestaurantView)都设置为null。尝试了LINQ表达式,给出了相同的错误。实际上,我的目标是通过构造排序表达式来动态执行。但即使是基本的lambda也不起作用。如果对象为null,那么您可能做错了什么。您可以发布实例化对象并尝试进行排序的代码吗?@user2921973如果您想显示示例代码,请编辑您的原始问题,您已经用不必要的代码困扰了此线程。此外,如果内部类为
null
,则显然没有设置它们。使用一些重现问题的示例代码更新您的问题,这可能会使问题更清楚。感谢Noctis,我收到以下错误“在调用方法之前检查以确定对象是否为null。使用new关键字创建对象实例”var sorted_list=listR orderby rest.Restaurant.RestaurantId中的rest,选择rest;上面提到的错误是因为rest的所有对象(Booking、Restaurant和RestaurantView)都为空。虽然原始列表根据下面的注释正确填充了所有对象,但听起来很可能您没有正确填充属性。您的核心问题可能与订购无关。如果您想得到问题的答案,您需要发布设置属性的代码。