【问题标题】:Group by clause in Entity Framework or Micro ORM using lambda使用 lambda 在实体框架或微 ORM 中按子句分组
【发布时间】:2014-10-20 17:51:40
【问题描述】:

如何通过 Lambda 表达式(实体框架或微 ORM)使用以下查询?

    SELECT a.RestaurantID
        ,MAX(a.EventDate) LastPeriodCloseDate
    FROM (
        SELECT RestaurantID
            ,EventType
            ,EventDate
        FROM SystemCalendar
        WHERE EventType = 'P'
       ) a
   GROUP BY RestaurantID
   HAVING MAX(a.EventDate) BETWEEN '2014-10-31'
         AND '2015-03-31'

【问题讨论】:

  • 请添加您的 C# 代码。目前尚不清楚您到底卡在哪里以及遇到了什么问题
  • 我想使用 C# lambda 表达式而不是使用 tsql 来获得上述查询的相同输出。无法使用实体框架的 lambda 同时处理 group by 和 having 子句。
  • 我是这个领域的新手,并试图使用类似以下的东西。无法设置子句标准... var list = _db.SystemCalendars .Where(e => e.EventType == "P") .GroupBy(r => r.RestaurantID) .Select(s => new { RestaurantID = s.FirstOrDefault().RestaurantID ,LastPeriodCloseDate = s.Count() });

标签: entity-framework sql-server-2008 micro-orm


【解决方案1】:

您的内部选择不是必需的。你可以这样做:

DateTime start = new DateTime(2014, 10, 31);
DateTime end = new DateTime(2015, 3, 31);

var query = _db.SystemCalendar
               .Where(x => x.EventType == "P")
               .GroupBy(x => x.RestaurantID, 
                        x => new 
                        { 
                          RestaurantID = x.Key, 
                          LastPeriodCloseDate = x.Max(y => y.EventDate) 
                        })
               .Where(x => x.LastPeriodCloseDate >= start && 
                           x.LastPeriodCloseDate < end);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    • 2019-05-14
    • 2019-10-13
    相关资源
    最近更新 更多