【问题标题】:Lambda Query GroupBy with boolean values带有布尔值的 Lambda 查询 GroupBy
【发布时间】:2014-12-22 23:56:44
【问题描述】:

我有许多需要返回使用.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 语句中,或者可能需要一个嵌套查询。毫无疑问,它会简单得多。

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

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

【问题讨论】:

  • 答案(是否要使用聚合或在 GroupBy lambda 中包含属性)取决于这些属性中的不同值是否意味着不同的组。也就是说,如果两个HolidayChecklist除了startTime和endTime之外都是一样的,应该归为一组吗?
  • 数据写入表的位置我可以确保任何组的 startTime 和 endTime 值都相同,尽管我更喜欢使用 Min / Max 等聚合。

标签: c# asp.net-mvc lambda boolean linq-group


【解决方案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()
    });

关于 lambdas 的一个很好的资源是 MSDN 上的 Lambda Expressions 文章。

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

【讨论】:

  • 这看起来像票...我一回到家就会测试它 - 我尝试使用 .First 和 .Last 但将它放在错误的位置,即 .Select 所在的位置在上面的代码中。对我来说,它应该与 startTime .First 和 endTime .Last 一起使用。我是如此接近!谢谢。
  • 使用上面我得到以下,螺母交换到FirstOrDefault修复它... +$exception {"方法'First'只能用作最终查询操作。考虑使用方法'而是在这种情况下使用 FirstOrDefault'。"} System.Exception {System.NotSupportedException} 谢谢,你让我越线了!哦,还有链接。
猜你喜欢
  • 2019-04-05
  • 2019-07-26
  • 2015-09-19
  • 2012-08-23
  • 2021-09-21
  • 2011-09-21
  • 2021-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多