LINQ to entities:如何 return 客户的最新订单号

LINQ to entites: How to return the latest order number for a customer

假设我们有典型的 CustomersOrders 关系,其中一个 Customer 可以有多个 Orders,而 Orders 包含 CustomerId 作为 FK。

我认为这段代码 return 是最新订单的整个订单实体:

    Order latestOrder = (from o in context.Orders 
                         //where conditions or joins to be included here                                                    
                         group o by o.CustomerId into grp
                         select grp.OrderByDescending(g => g.OrderDate).First())

如何才能 return 仅 string 类型的 OrderNumber,而不是整个实体? (如果有 none 则为空)

    string latestOrderNumber = (?)

谢谢。

您可以尝试这样的操作:

 Order latestOrder = (from o in context.Orders 
                      //where conditions or joins to be included here                                                    
                      group o by o.CustomerId into grp
                      select grp.OrderByDescending(g => g.OrderDate).FirstOrDefault());

最好使用 FirstOrDefault。如果未找到任何订单,则结果为空。然后检查结果是否不为 null 并且您只读取返回项的 属性。

if(latestOrder!=null)
    lastOrdeNumber = lastOrder.OrderNumber;

您需要在 First() 之前调用 Select(g => g.OrderNumber) 并且您需要再次调用 FirstOrDefault 以检索单个 OrderNumber 而不是 IQueryable<string>

string latestOrderNumber = (from o in context.Orders 
                            group o by o.CustomerId into grp
                            select grp.OrderByDescending(g => g.OrderDate)
                                     .Select(g => g.OrderNumber)
                                     .FirstOrDefault()
                           ).FirstOrDefault();

试试这个。希望对您有所帮助!

var result = context.Orders.OrderByDescending(o => o.OrderDate)
            .GroupBy(x => x.CustomerId)
            .Select(grp => grp.First().OrderNumber);