我有三个类似于以下的类。基本上,一个订单将被分配多个状态。
public class Order {
public int Id { get; set; }
public DateTime Created { get; set; }
...
public ICollection<OrderStatus> OrderStatus { get; set; }
}
public class Status {
public int Id { get; set; }
public DateTime Date { get; set; }
...
public ICollection<OrderStatus> OrderStatus { get; set; }
}
public class OrderStatus {
public int Id { get; set; }
public Order Order{ get; set; }
public Status Status { get; set; }
}
我的目标是获取已分配给状态在0001-1000之间的每个订单的最后状态。这是我到目前为止所拥有的:
orders.SelectMany(x => x.OrderStatus.Where(x => x.Status.Id >= 0001 && x.Status.Id <= 1000).OrderByDescending(x => x.Date).Select(x => x.Date));
这部分是我只想选择每个而不是全部的地方。
.Select(x => x.Date)
编辑:
在@StriplingWarrior的帮助下,我开始工作了!
我忘了提,我只希望每个订单的最后状态日期。因此,基本上,每个订单的末尾我都会有一个日期列表。这是最终产品:
List<DateTime> dates = buchungen.SelectMany(x => x.OrderStatus.Where(x => x.Status.Id >= 0001 && x.Status.Id <= 1000).GroupBy(x => x.OrderId).Select(g => g.OrderByDescending(x => x.Date).FirstOrDefault()).Select(x => x.Date));
答案 0 :(得分:1)
如果您需要订单信息及其最后状态,这是要使用的常规结构:
orders
.Select(x => new
{
order = x,
lastStatus = x.OrderStatus
.Where(x => x.Status.Id >= 0001 && x.Status.Id <= 1000)
.OrderByDescending(x => x.Date)
.FirstOrDefault()
})
如果您实际上只希望每个订单的最后状态,则可以直接转到订单状态表,如下所示:
context.OrderStatuses
.Where(s => s.Id >= 0001 && s.Id <= 1000)
.GroupBy(s => s.OrderId)
.Select(g => g.OrderByDescending(x => x.Date).FirstOrDefault())