我有很多需要返回使用.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
(布尔值)返回给View。我不知道我是否需要一个我不知道的聚合运算符,需要包含在.GroupBy
语句中或者可能需要嵌套查询。毫无疑问,它会更简单。
我确实考虑过将数据类型更改为整数,但是想知道是否有“正确”执行此操作的方法。
顺便说一句,是否有针对lambda查询的学习资源或文档?我可以找到基本信息,但没有详细说明.GroupBy
如何工作,或者聚合运算符是什么。
答案 0 :(得分:0)
如果您确定所有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的一个很好的资源是MSDN上的Lambda Expressions文章。
Aggregation Operations看起来很好地概述了LINQ中可用的各种聚合操作。不幸的是,这些例子都在VB.NET中。