实体框架 - 如何通过一个查询选择每个IDNumber的第一行使用lambda

时间:2015-02-11 21:15:04

标签: c# asp.net-mvc entity-framework lambda entity-framework-5

我的订单表IdNumber是用户的ID,我需要获取每个用户的最后一个订单(InsuranceDate是日期)。

问题是如果一个用户可以拥有多个订单,如何获得最后一个订单。如何在实体查询后使用一个没有大量foreach的查询来执行此操作?

public class Order
{
    [Key]
    public int OrderID { get; set; }        
    public string IdNumber { get; set; }
    public int Price { get; set; }
    public Datetime InsuranceDate { get; set; }
}

2 个答案:

答案 0 :(得分:2)

尝试使用此解决方案:

  var r = db.Orders.GroupBy(o => o.IdNumber).Select(g => g.OrderByDescending(o => o.InsuranceDate).FirstOrDefault());

首先,您需要按用户ID对订单进行分组。然后,按每个组的降序排序,只选择第一个。这样您就可以得到每个用户的最后一个订单。

答案 1 :(得分:0)

你可以尝试这样的事情:var result = Orders.OrderByDescending(o => o.InsuranceDate).FirstOrDefault(x => x.IdNumber == userID);其中userID是你想要匹配的用户ID。