public async Task <IEnumerable <VegaMoveDeviceData> > GetCurrentAsync(CancellationToken cancellationToken = default) { var dataIds = (from data in _context.MoveDeviceDatas group data by data.DeviceId into gData select new { gData.Key, date = gData.Max(x => x.Uptime) }) .AsNoTracking(); Expression <Func <VegaMoveDeviceData, bool> > predict = x => false; foreach (var item in dataIds) { Expression <Func <VegaMoveDeviceData, bool> > lambdaNew = x => x.Uptime == item.date && x.DeviceId == item.Key; var lambdaBody = ExpressionReplacer .ReplaceParameter(lambdaNew.Body, lambdaNew.Parameters[0], predict.Parameters[0]); var body = Expression.OrElse(predict.Body, lambdaBody); predict = Expression.Lambda <Func <VegaMoveDeviceData, bool> >(body, predict.Parameters); } return(await _context.MoveDeviceDatas .Where(predict) .AsNoTracking() .ToListAsync(cancellationToken) .ConfigureAwait(false)); }