首页 > 解决方案 > LINQ 效率

问题描述

考虑以下 LINQ 语句:

var model = getModel();

// apptId is passed in, not the order, so get the related order id
var order = (model.getMyData
    .Where(x => x.ApptId == apptId)
    .Select(y => y.OrderId));

var orderId = 0;

var orderId = order.LastOrDefault();

// see if more than one appt is associated to the order
var apptOrders = (model.getMyData
    .Where(x => x.OrderId == orderId)
    .Select(y => new { y.OrderId, y.AppointmentsId }));

此代码按预期工作,但我不禁认为有一种更有效的方法来实现目标(一次调用 db )。

有没有办法将上面的两个 LINQ 语句合并为一个?对于这个问题,请假设我需要使用 LINQ。

标签: c#linq

解决方案


您可以使用 GroupBy 方法按 OrderId 对所有订单进行分组。应用 LastOrDefault 和 ToList 后,您将获得与上述代码相同的结果。

这是一个示例代码:

 var apptOrders = model.getMyData
    .Where(x => x.ApptId == apptId)
    .GroupBy(s => s.OrderId)
    .LastOrDefault().ToList();

推荐阅读