EF通过选择前1来优化多个订单

时间:2017-07-17 04:08:33

标签: sql-server entity-framework

我有以下实体框架查询:

var queryResponse = await db.DataPoints.GroupBy(x => x.Device).Select(x => new
   {
       lon = x.Key.DataPoints.OrderByDescending(y => y.DateTime).Select(y => y.Longitude).FirstOrDefault(),
       lat = x.Key.DataPoints.OrderByDescending(y => y.DateTime).Select(y => y.Longitude).FirstOrDefault(),
       date = x.Key.DataPoints.OrderByDescending(y => y.DateTime).Select(y => y.DateTime).FirstOrDefault(),
       label = x.Key.Name,

    })
      .OrderByDescending(x => x.label)
      .ToListAsync();

现在你可以在我的选择中看到,我必须得到lon,'lat'和'date'。但是我这样做的方式,我必须orderby并选择第一个3次。 'DataPoints'是一个非常大的表。

在C#中我通常会执行orderBy一次,只需选择整个对象,然后再将其分解为3个属性。但是在这种情况下,我希望SQL返回确切的字段。

是否有更有效的方式来编写此查询?

1 个答案:

答案 0 :(得分:1)

试试这个:

var queryResponse =
    (from g in db.DataPoints.GroupBy(x => x.Device)
     let latestDataPoint = g.Key.DataPoints.OrderByDescending(p => p.DateTime)
                            .FirstOrDefault()
     select new
     {
        lon = latestDataPoint.Longitude,
        lat = latestDataPoint.Latitude,
        date = latestDataPoint.DateTime,
        label = g.Key.Name
    })
    .OrderByDescending(x => x.label)
    .ToList();