コード例 #1
0
        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));
        }