Я написал следующее LINQ запрос в список возврата, а затем итерирующий список отдельно для преобразования времени в часы и получения суммы часов для каждого элемента списка.LINQ Query - Как я могу улучшить свой запрос?
Уверен, что это может быть не сразу, поскольку он отправляет три вызова базы данных.
Могу ли я переписать его лучшим способом, например. GroupBy или каким-либо другим способом присвоить данные модели, конвертируя IdleTime в часы и чем брать сумму IdleTime ??
Модель Класс
public class TestModel
{
public string TaskSummary { get; set; }
public string LocationName { get; set; }
public float IdleTime { get; set; }
public string Description { get; set; }
public float IdleTimeSum { get; set; }
public Guid TaskId { get; set; }
}
запросов LINQ
List<TestModel> list = _context.Time
.Include(x => x.Report)
.Include(x => x.Report.Task)
.Include(x => x.Report.Task.Location)
.Where(x => taskIds.Contains(x.Report.TaskId))
.Select(x => new TestModel
{
TaskSummary = x.Report.Task.Summary,
LocationName = x.Report.Task.Location.Name,
IdleTime = x.Duration,
Description = x.Description,
TaskId = x.Report.TaskId,
}).ToList();
Как я преобразования в часы?
foreach (var item in list)
item.IdleTime = item. IdleTime/60;
Как я беру сумму?
foreach (var item in list)
item.IdleTimeSum = item. IdleTime;
Использование IdleTime = x.Duration/60 всегда дает 0, а не ожидаемое значение. Вот почему я повторяю отдельно. – immirza
Является ли 'IdleTime' целым числом в базе данных? Попробуйте 'IdleTime/60.0f', чтобы заставить деление с плавающей запятой. –
Duration имеет тип int в базе данных. Я получил вашу точку зрения, и я считаю, что единственная причина, по которой IdleTime получала 0. Спасибо D Stanely. – immirza