微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

选择每个导航属性的第一个

如何解决选择每个导航属性的第一个

我有三个类似于以下的类。基本上,一个订单将被分配多个状态。

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));

解决方法

如果您需要订单信息及其最后状态,这是要使用的常规结构:

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())

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。