具有布尔值的Lambda Query GroupBy

本文关键字:Query GroupBy Lambda 布尔值 | 更新日期: 2023-09-27 18:28:04

我有许多实例需要返回使用.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());

这正是我所需要的。但是,除了startDateendDate之外,我还需要将作为布尔值的startTimeendTime返回到视图。我不知道我是否需要一个我不知道的聚合运算符,是否需要包含在.GroupBy语句中,或者可能需要一个嵌套查询。毫无疑问,这将是一件简单得多的事情。

我确实考虑过将数据类型更改为整数,但我想知道是否有"正确"的方法。

顺便说一句,是否有用于lambda查询的学习资源或文档?我可以找到基本信息,但没有任何信息详细说明.GroupBy是如何工作的,或者聚合运算符是什么。

具有布尔值的Lambda Query GroupBy

如果您确定所有的startTimeendTime值都是相同的(或者您不在乎),您可以使用.First来选择组的startTimeendTime值中的第一项:

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表达式文章。

聚合操作看起来很好地概括了LINQ中可用的各种聚合操作。不幸的是,这些例子都在VB.NET中。