2

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

这可以满足我的需要。但是,除了startDateand之外,endDate我还需要将startTimeand endTime(布尔值)返回给 View。我不知道我是否需要一个我不知道的聚合运算符,是否需要包含在.GroupBy语句中,或者可能需要一个嵌套查询。毫无疑问,这将是更简单的事情。

我确实考虑将数据类型更改为整数,但想知道是否有办法“正确”地做到这一点。

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

4

1 回答 1

0

如果您确定所有的startTimeandendTime值都相同(或者您不在乎),您可以使用来选择组和值.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 中。

于 2014-10-27T18:10:59.220 回答