Lambda Query GroupBy с логическими значениями
У меня есть несколько случаев, когда мне нужно вернуть список данных, который использует .GroupBy
, В дополнение к датам и целым числам мне также нужно возвращать логические значения, что я не могу сделать. Пример модели:
public class HolidayCheckList
{
public DateTime startDate { get; set; }
public DateTime endDate { get; set; }
public int stafferId { get; set; }
public bool startTime { get; set; }
public bool endTime { get; set; }
}
Ниже приведен контроллер, как это в настоящее время:
var model = _db.AnnualLeaves
.Where(r => r.StartDate <= tTE && r.EndDate >= tTS)
.GroupBy(r => r.tBooked)
.Select(m => new HolidayCheckList
{
startDate = m.Max(r => r.StartDate),
endDate = m.Max(r => r.EndDate),
stafferId = m.Min(r => r.StafferId)
});
return View(model.ToList());
Это делает то, что мне нужно. Однако в дополнение к startDate
а также endDate
Мне нужно вернуть startTime
а также endTime
, которые являются логическими значениями, для просмотра. Я не знаю, нужен ли мне агрегатный оператор, о котором я не знаю, необходимо включить в .GroupBy
оператор или, возможно, нужен вложенный запрос. Без сомнения, это будет намного проще.
Я подумал об изменении типа данных на целое число, но хотел бы знать, есть ли способ сделать это "правильно".
Кроме того, есть ли учебный ресурс или документация для лямбда-запросов? Я могу найти основную информацию, но ничего такого, как подробно .GroupBy
работает, или каковы агрегатные операторы.
1 ответ
Если вы уверены, что все startTime
а также endTime
значения будут одинаковыми (или вам все равно), вы можете использовать .First
выбрать первый элемент в группе startTime
а также endTime
ценности:
var model = _db.AnnualLeaves
.Where(r => r.StartDate <= tTE && r.EndDate >= tTS)
.GroupBy(r => r.tBooked)
.Select(m => new HolidayCheckList
{
startDate = m.Max(r => r.StartDate),
endDate = m.Max(r => r.EndDate),
stafferId = m.Min(r => r.StafferId),
startTime = m.Select(r => r.StartTime).First(),
endTime = m.Select(r => r.EndTime).First()
});
Хорошим ресурсом для лямбд является статья Lambda Expressions на MSDN.
Агрегирование операций выглядит как хороший обзор различных агрегатных операций, доступных в LINQ. К сожалению, примеры есть в VB.NET.