【问题标题】:linq-to-sql grouping anonymous typelinq-to-sql 分组匿名类型
【发布时间】:2012-07-19 23:19:07
【问题描述】:

我有一张包含约会的表格。这些约会有不同的状态(字节从 1 到 5)和日期;日期列简称为AppointDate。我传入了一个 ID 列表,我想根据状态以及约会日期是否过去对结果进行分组。

TheIDs 是作为参数传入的 long 列表。这是我目前所拥有的:

var TheCounterInDB = (from a in MyDC.Appointments
                      where TheIDs.Contains(a.ID)
                      group a by a.AppointStatus into TheGroups
                      select new { 
                             TheStatus = TheGroups.Key,
                             TheTotalCount = TheGroups.Count(),
                             TheLateCount = ?,
                             ThePendingCount = ?
                      }).ToList();

基本上,我希望 TheLateCount 成为状态为 1 且日期已过去的所有约会的计数,ThePendingCount 成为状态为 1 且日期未过去的计数。我的匿名类型很适合返回所有不同状态的计数(这就是 .Key 所在的位置),但我想知道如何最好地将日期要求添加到分组中。

感谢您的建议。

【问题讨论】:

  • 嗯,你用的是什么数据库?在您的数据库中简单地创建两个视图可能会更容易,一个计算延迟约会,一个计算未决约会。这样,您可以简单地调用视图(假设您使用的是支持此功能的数据库)并访问它们返回的一行。
  • @Adam:你还需要什么?我想这一切都在那里。

标签: c# linq-to-sql


【解决方案1】:
var TheCounterInDB = (from a in MyDC.Appointments
                      where TheIDs.Contains(a.ID)
                      group a by a.AppointStatus into TheGroups
                      select new { 
                             TheStatus = TheGroups.Key,
                             TheTotalCount = TheGroups.Count(),
                             TheLateCount = TheGroups.Count(x => x.AppointStatus == 1 && x.AppointDate < DateTime.Today),
                             ThePendingCount = TheGroups.Count(x => x.AppointStatus == 1 && x.AppointDate >= DateTime.Today)
                      }).ToList();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多