我有代码:
var trips = _db.Trips
.OrderBy(u => u.TripStops.Where(p=>p.StopTypeId == destinationTypeId).OrderByDescending(c=>c.StopNo).Select(p=>p.Appt).FirstOrDefault())
这部分(按appt排序,最后一个TripStop类型= destinationTypeId)应在代码中的许多地方使用。
我想写一个像这样的方法:
private xxx LastTripStopAppt(...)
{
}
然后像这样使用它:
var trips = _db.Trips
.OrderBy(LastTripStopAppt(u))
但是对于如何正确实现此方法有些困惑。
PS。我尝试这样做
private DateTime? ReturnLastDeliveryAppointment(Trip u, int destinationTypeId)
{
return u.TripStops.Where(p => p.StopTypeId == destinationTypeId).OrderByDescending(c => c.StopNo).Select(p => p.Appt).FirstOrDefault();
}
然后
.OrderBy(u => ReturnLastDeliveryAppointment(u, destinationTypeId))
但是我得到一个错误:
LINQ to Entities无法识别该方法 'System.Nullable`1 [System.DateTime] ReturnLastDeliveryAppointment(Infrastructure.Asset.Trips.Trip,Int32)' 方法,并且该方法不能转换为商店表达式。
答案 0 :(得分:3)
签名可能类似于:
private Expression<Func<Trip, apptType>> LastTripStopAppt(...)
其中appType
是p.Appt
的类型
您需要将destinationTypeId
作为参数传递给此方法。
因此,如果appType
是string
:
private static Expression<Func<Trip, string>> LastTripStopAppt(int destinationTypeId)
{
return u => u.TripStops.Where(p=>p.StopTypeId == destinationTypeId).OrderByDescending(c=>c.StopNo).Select(p=>p.Appt).FirstOrDefault();
}
答案 1 :(得分:-3)
选择* 从(VALUES(1),(4),(3))t(v) 按T排序;
Java 8:
Stream s = Stream.of(11,41,3);
s.sorted() .forEach(System.out :: println);
输出:
3
11
41