Linq - 按日期分组并选择计数

2024-04-22

我目前正在解决一个问题,我想运行一个查询,该查询按所选日期对结果进行分组。

对于这个例子,想象一个像这样的简单模型:

public class User
{
      public DateTime LastLogIn {get; set;}
      public string Name {get; set;}
}

我正在寻找的解决方案是获取按日期登录的用户计数。 在数据库中,日期时间存储有日期和时间组件,但对于此查询,我实际上只关心日期。

我目前拥有的是这样的:

    context.Users
            .Where((x.LastLogIn  >= lastWeek)    
                && (x.LastLogIn <= DateTime.Now))
            .GroupBy(x => EntityFunctions.TruncateTime(x.LastLogIn))
            .Select(x => new
            {
                Value = x.Count(),
                Day = (DateTime)EntityFunctions.TruncateTime(x.Key)
            }).ToList();

然而上面返回一个空列表。

最终目标是拥有一个对象列表,其中包含一个值(一天登录的用户数)和一个日期(相关日期)

有什么想法吗?

将查询更改为:

    context.Users
            .Where((x.LastLogIn  >= lastWeek)    
                && (x.LastLogIn <= DateTime.Now))
            .GroupBy(x => EntityFunctions.TruncateTime(x.LastLogIn))
            .Select(x => new
            {
                Value = x.Count(),
                Day = (DateTime)x.Key
            }).ToList();

现在,它返回一个包含单个项目的列表,其中“值”是与 where 子句匹配的用户总数,“日”是第一天。按天看来还是没能分组

NOTE:事实证明上面的代码是正确的,我只是做了其他错误的事情。

它生成的 Sql 是(请注意,这里可能有非常轻微的语法错误,我在示例中对其进行了调整):

SELECT 
1 AS [C1], 
[GroupBy1].[A1] AS [C2], 
 CAST( [GroupBy1].[K1] AS datetime2) AS [C3]
FROM ( SELECT 
        [Filter1].[K1] AS [K1], 
        COUNT([Filter1].[A1]) AS [A1]
        FROM ( SELECT 
                 convert (datetime2, convert(varchar(255), [Extent1].[LastLogIn], 102) ,  102) AS [K1], 
                1 AS [A1]
                FROM [dbo].[Users] AS [Extent1]
                WHERE (([Extent1].[LastLogIn] >= @p__linq__1) AND ([Extent1].[LastLogIn] <= @p__linq__2)
        )  AS [Filter1]
       GROUP BY [K1]
)  AS [GroupBy1] 

你不需要第二个TruncateTime在那里:

context.Users
    .Where((x.LastLogIn  >= lastWeek) && (x.LastLogIn <= DateTime.Now))
    .GroupBy(x => DbFunctions.TruncateTime(x.LastLogIn))
    .Select(x => new
    {
        Value = x.Count(),
        // Replace the commented line
        //Day = (DateTime)DbFunctions.TruncateTime(x.Key)
        // ...with this line
        Day = (DateTime)x.Key
    }).ToList();

The GroupBy已经截断了时间DateTime已经,所以你不需要再次调用它。

To use DbFunctions.TruncateTime你需要引用程序集System.Data.Entity并包括using System.Data.Entity;

Note:编辑以解决弃用问题EntityFunctions.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linq - 按日期分组并选择计数 的相关文章

随机推荐

  • cygwin g++ std::stoi“错误:‘stoi’不是‘std’的成员

    I have Windows 7 32 位上的 cygwin 1 7 25 g 版本 gt g GCC 4 8 2 libstdc a gt gcc g 4 8 2 1 试图制作一个c 你好世界 include
  • React Context API - 在页面刷新时保留数据

    假设我们设置了一个上下文提供程序以及一些初始数据属性值 在此过程中 假设消费者随后修改了这些属性 页面重新加载时 这些更改将丢失 保存数据以便我们可以保留这些数据修改的最佳方法是什么 除了本地存储之外还有其他方法吗 是的 如果您希望数据在重
  • 为什么需要在 createToken 方法中传递一个字符串?

    为了在 Laravel Sanctum 中创建访问令牌 需要在createToken方法 我觉得这很奇怪 因为您传入的任何内容都会使用 SHA 256 进行哈希处理 或者您可以获取纯文本令牌 为什么访问令牌不是基于随机字符串创建的 它可以很
  • 从非 UI 线程更新 Windows 窗体上的标签?

    我已经尝试了 2 天来做到这一点 我查看了大量的 stackoverflow 答案并尝试了所有答案 但仍然遇到同样的问题 我在 Windows 窗体上有一个标签 此 Windows 窗体上的唯一代码是 var thread1 new Thr
  • PowerShell参数值建议

    我用 C 编写了一个 Cmdlet 是否可以为特定字符串参数提供所有可能的值 此示例为 PackageId public sealed class InstallPackageCommand PSCmdlet Parameter Posit
  • c++17 有效地将参数包参数与 std::array 元素相乘

    我想有效地将 参数包中的参数与 std array 的元素相乘 int index auto Is std array
  • 散景布局的背景颜色

    我正在玩散景滑块演示 https demo bokehplots com apps sliders 源代码here https github com bokeh bokeh blob master examples app sliders
  • 在WPF中设置鼠标位置[重复]

    这个问题在这里已经有答案了 我打算用 Kinect 手势替换我的鼠标 但我找不到为 WPF 应用程序设置鼠标位置的方法 无法使用 NET BCL 但是 如果您确实想要它 您可以使用本机SetCursorPos in User32 dll D
  • 使用 JPA 和 Hibernate 将 Java 布尔值映射到 Oracle Number 列

    我在我的模型中创建了这样的属性 public class Client private Boolean active 我的 RDBMS 是 Oracle active列的类型NUMBER 1 0 如何使用Restrictions API实现
  • MySQL:具有授予选项的用户无法授予创建用户

    我创建了一个具有 root 的用户 new user 如下所示 GRANT ALL ON labor TO new user WITH GRANT OPTION GRANT ALL ON labor TO new user localhos
  • 姜戈 - 403 禁止。 CSRF 令牌缺失或不正确

    我尝试为我的模型添加 ModelForm 但每次 POST 尝试都以 403 Forbidden CSRF 验证失败 请求中止 失败原因给出 CSRF 令牌丢失或不正确 结束 我没有 render to response 方法 因此无法通过
  • 如何禁用/覆盖 PowerShell 点表示法

    PowerShell 中的命令几乎与 Bash 类似 但点符号扩展给我带来了很多工作 目前我必须将很多命令参数用引号引起来 mvnw cmd Dmaven repo local m2 repository deploy deploy fil
  • winkler的Python性能改进请求

    我是一个 python n00b 我想要一些关于如何改进算法的建议 以提高计算两个名字的 Jaro Winkler 距离的方法的性能 def winklerCompareP str1 str2 Return approximate stri
  • 为什么 ng-mouseover 不能与 ng-if 一起使用

    我试图在具有 ng if 的图像上使用 ng mouseover 指令 但它不起作用 但如果我使用 ng show 指令它起作用 每个人都可以告诉我为什么吗 或者这是 AngularJS 的问题 在 AngularJS 文档中 我无法阅读任
  • WooCommerce 挂钩 woocommerce_cancelled_order

    再会 这是我第一次使用 stackoverflow 很高兴认识大家 不管怎样 我正在为 WooCommerce 编写一个插件 当订单取消时我会自动退款 当我在没有钩子的情况下在单独的文件中手动执行它时 我的代码工作正常 但是 使用我的钩子它
  • Azure 移动服务和 Azure Web 应用身份验证

    当用户通过 Azure Web 应用程序 ASP NET MVC 和 Xamarin iOS 应用程序登录时 我为同一用户获得两个不同的 SID Setup 带有 API 控制器的 Azure WebApp ASP NET 5 带有 Mic
  • 如何使用 proguard 混淆 android 库(.aar)?

    我想混淆 aar使用 proguard 进行分发的库 我在互联网上尝试了很多解决方案 但到目前为止没有任何效果 只有一些代码被混淆了 有人可以帮我解决这个问题吗 在 build gradle 中 在 defaultConfig 下添加 Co
  • 将数据从 ASP.NET MVC 控制器推送到视图

    我正在构建一个网站的后端 该网站的前端将有多个需要实时更新的 小部件 现在我只是有一个加载方法 它用数据填充所有小部件 显然是在页面加载时 我的问题是如何处理进一步更新的实时方面 我想过只进行多个 ajax 调用 它可以每秒左右查询一个服务
  • 运行 Code First 迁移种子方法而不进行迁移

    如何运行代码优先实体框架迁移而不更改数据模型中的任何内容 这会导致创建迁移 我只想再次运行种子方法 因为我向其中添加了一些内容 如果你只需要运行Seed 再次 没有任何改变会导致添加新的迁移 只需调用Update Database再次没有标
  • Linq - 按日期分组并选择计数

    我目前正在解决一个问题 我想运行一个查询 该查询按所选日期对结果进行分组 对于这个例子 想象一个像这样的简单模型 public class User public DateTime LastLogIn get set public stri