带键的 LINQ groupby 语句

2024-03-05

我的查询的语法很好,但输出却不好,这真的很奇怪。

我有下表:

| AppointID | UserID | AppointSet | AppointResolved |  AppointStatus | AppointmentDatetime
|     1     |   1    |  3/1/2011  |   3/1/2011      |      1         |     3/15/2011
|     2     |   1    |  3/2/2011  |   3/5/2011      |      4         |     3/16/2011
|     3     |   1    |  3/2/2011  |   3/11/2011     |      2         |     3/11/2011
|     4     |   1    |  3/3/2011  |   3/7/2011      |      3         |     3/25/2011

ApponintStatus 是一个字节,其中 1 表示设置,2 表示出席,3 表示重新安排,4 表示取消。 AppointDatetime 是设置约会的日期。

我想要做的是创建以下输出,按天计算活动。

|    Date     |   Set   |   Attended   |   Rescheduled   |   Cancelled   |
|  3/1/2011   |    1    |              |                 |               |
|  3/2/2011   |    2    |              |                 |               |
|  3/3/2011   |    1    |              |                 |               |
|  3/5/2011   |         |              |                 |      1        |
|  3/7/2011   |         |      1       |                 |               |
|  3/11/2011  |         |              |        1        |               |

这是我到目前为止所拥有的。 TheDate 是我查询的月份内的日期(即,通过 3 月 4 日,应返回 3 月表)

var r = from appnt in MyDC.LeadsAppointments
        where appnt.UserID == TheUserID
        where (appnt.AppointResolved.Year == TheDate.Year && appnt.AppointResolved.Month == TheDate.Month) ||
        (appnt.AppointSet.Year == TheDate.Year && appnt.AppointSet.Month == TheDate.Month)
        group appnt by appnt.AppointResolved.Date into daygroups
        select new ViewMonthlyActivityModel()
        {
            ViewDate = (from d in daygroups
                        select daygroups.Key.Date).First(), // Problem here: need to get dates for instances where an appointment is set but none are resolved

            CountTotalSetOnDay = (from c in daygroups
                                  where c.AppointSet.Date == daygroups.Key // Problem here
                                  select c.AppointID).Count(),

            CountAttendedOnDay = (from c in daygroups
                                  where c.AppointResolved.Date == daygroups.Key.Date
                                  where c.AppointStatus == 2
                                  select c.AppointID).Count(),

问题之一是 CountTotalSetOnDay 仅返回当天设置和解决的计数;另一个问题是 ViewDate 需要返回所有日期:有些日期没有设置约会,但有约会参加、重新安排或取消,反之亦然,有些日期设置了约会但没有解决。

现在,我正在使用 2 个查询运行该查询,并加入结果:一个查询返回约会集,另一个查询返回已解决的约会。但是,我仍然坚持一次阅读一个查询的解决方案。

有什么建议么?

Thanks.


您需要使用设置日期和解决日期进行分组。这可以通过添加另一个来轻松实现from子句与日期集进行交叉连接并按这些日期进行分组。

下面的查询基于 LINQ to Objects 查询。 LINQ to SQL 不支持这种类型的查询,因此您必须决定是否要使用在客户端计算机上运行的查询还是在服务器上运行的查询。

const byte statusAttended = 2;
const byte statusRescheduled = 3;
const byte statusCancelled = 4;
var query = from a in MyDC.LeadsAppointments.AsEnumerable()
            from date in new[] { a.AppointSet.Date, a.AppointResolved.Date }
            where a.UserID == TheUserID
               && date.Year == TheDate.Year
               && date.Month == TheDate.Month
            group a by date into g
            orderby g.Key
            let set = g.Distinct().ToList()
            select new ViewMonthlyActivityModel
            {
                ViewDate = g.Key,
                CountTotalSetOnDay =
                    set.Count(a => a.AppointSet.Date == g.Key),
                CountTotalAttendedOnDay =
                    set.Count(a => a.AppointResolved.Date == g.Key
                                && a.AppointStatus == statusAttended),
                CountTotalRescheduledOnDay =
                    set.Count(a => a.AppointResolved.Date == g.Key
                                && a.AppointStatus == statusRescheduled),
                CountTotalCancelledOnDay =
                    set.Count(a => a.AppointResolved.Date == g.Key
                                && a.AppointStatus == statusCancelled),
            };

否则,对于应该有效的完整 LINQ to SQL 解决方案(不是最干净的),您可以尝试此操作。可能有更好的方法来做到这一点,但我不知道。

const byte statusAttended = 2;
const byte statusRescheduled = 3;
const byte statusCancelled = 4;
var query = from a in MyDC.LeadsAppointments
            let setDate = from aa in MyDC.LeadsAppointments
                          where aa.AppointID == a.AppointID
                          select aa.AppointSet.Date
            let resolvedDate = from aa in MyDC.LeadsAppointments
                               where aa.AppointID == a.AppointID
                               select aa.AppointResolved.Date
            from date in setDate.Concat(resolvedDate)
            where a.UserID == TheUserID
               && date.Year == TheDate.Year
               && date.Month == TheDate.Month
            group a by date into g
            orderby g.Key
            let set = g.Distinct()
            select new ViewMonthlyActivityModel
            {
                ViewDate = g.Key,
                CountTotalSetOnDay =
                    set.Count(a => a.AppointSet.Date == g.Key),
                CountTotalAttendedOnDay =
                    set.Count(a => a.AppointResolved.Date == g.Key
                                && a.AppointStatus == statusAttended),
                CountTotalRescheduledOnDay =
                    set.Count(a => a.AppointResolved.Date == g.Key
                                && a.AppointStatus == statusRescheduled),
                CountTotalCancelledOnDay =
                    set.Count(a => a.AppointResolved.Date == g.Key
                                && a.AppointStatus == statusCancelled),
            };
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带键的 LINQ groupby 语句 的相关文章

  • 将类对象放置在向量中?

    我注意到我可以将一个类放置在一个向量中 这是我的程序 我收到以下错误 out blackjack exe blackjack obj blackjack obj error LNK2019 unresolved external symbo
  • Environment.CurrentDirectory 与 System.IO.Directory.GetCurrentDirectory

    我正在编写一个 Net WinForms 并不断在调试和发布配置之间切换 并且有一些文件我需要任一配置才能访问 我想做的是将文件放在 BIN 文件夹中的公共目录中 这样它看起来像这样 MyProject Bin CommonFiles My
  • 转换 const void*

    我有一个函数返回一个const void 我想用它的信息作为char 我可以将它投射为 C 风格的罚款 char variable但是当我尝试使用reinterpret cast like reinterpret cast
  • 按扩展名过滤搜索文件返回太多结果

    我正在开发一个 C 控制台应用程序 它必须管理 Windows 操作系统上的文件 我需要获取具有特定扩展名的文件名 列表 我找到了很多解决方案 最建议的是以下一种 HANDLE hFind WIN32 FIND DATA data hFin
  • 前向声明类型和“已声明为类类型的非类类型”

    我对以下代码有问题 template
  • 循环遍历 C 结构中的元素以提取单个元素的值和数据类型

    我有一个要求 我有一个 C 语言的大结构 由大约 30 多个不同数据类型的不同元素组成 typedef struct type1 element1 type2 element2 type3 element3 type2 element4 1
  • 当事件button.click发生时,如何获取按钮名称/标签?

    我以编程方式制作按钮并将它们添加到堆栈面板中 以便每次用户导航到页面时按钮都会发生变化 我正在尝试做这样的事情 当我单击创建的按钮时 它将获取按钮的标签并转到正确的页面 但是 我无法使用 RoutedEventHandler 访问按钮元素
  • RestSharp获取序列化输出

    我正在寻找一种方法来访问 AddBody 调用的序列化结果 我正在使用内置的 RestSharp 序列化器 例子 class Foo public string FooField void SendRecord var f new Foo
  • 如何使用 Regex.Replace 从字符串中删除数字?

    我需要使用Regex Replace从字符串中删除所有数字和符号 输入示例 123 abcd33输出示例 abcd 请尝试以下操作 var output Regex Replace input d string Empty The d标识符
  • 如何使用 ASP.NET Core 获取其他用户的声明

    我仍在学习 ASP NET Core 的身份 我正在进行基于声明的令牌授权 大多数示例都是关于 当前 登录用户的 就我而言 我的 RPC 服务正在接收身份数据库中某个用户的用户名和密码 我需要 验证是否存在具有此类凭据的用户 获取该用户的所
  • 如何使用 x64 运行 cl?

    我遇到了和这里同样的问题致命错误 C1034 windows h 未设置包含路径 https stackoverflow com questions 931652 fatal error c1034 windows h no include
  • 如何递归取消引用指针(C++03)?

    我正在尝试在 C 中递归地取消引用指针 如果传递一个对象 那就是not一个指针 这包括智能指针 我只想返回对象本身 如果可能的话通过引用返回 我有这个代码 template
  • 从 C# 使用 Odbc 调用 Oracle 包函数

    我在 Oracle 包中定义了一个函数 CREATE OR REPLACE PACKAGE BODY TESTUSER TESTPKG as FUNCTION testfunc n IN NUMBER RETURN NUMBER as be
  • C++ - 多维数组

    处理多维数组时 是否可以为数组分配两种不同的变量类型 例如你有数组int example i j 有可能吗i and j是两种完全不同的变量类型 例如 int 和 string 听起来您正在寻找 std vector
  • Oauth2中如何同时撤销RefreshToken和使AccessToken失效

    我正在使用 Owin Oauth2 授权和资源服务器相同 开发单页面应用程序 AngularJS Net MVC Json Rest API 的身份验证流程 我选择了 Bearer Token 路由而不是传统的 cookie session
  • 为什么 0.5 mod 0.1 在不同的编程语言中结果不同?

    我有一个关于模数的问题 模运算求一个数除以另一个数的余数 我原本期望 0 5 0 1 0 的结果 但是当我在 PHP 或 net 中运行它时 我得到 0 1 我运行的 php 代码是 var dump fmod 0 5 0 1 在 net中
  • WPF DataGrid / ListView 绑定到数组 mvvm

    我们假设你有 N 个整数的数组 表示行数的整数值 在模型中 该整数绑定到视图中的 ComboBox Q1 如何将数组 或数组的各个项目 绑定到 DataGrid 或 ListView 控件 以便 当您更改 ComboBox 值时 只有那么多
  • 了解 Lambda 表达式和委托 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经尝试解决这个问题很长一段时间了 阅读在线博客和文章 但到目前为止还没有成功 什么是代表 什么是 Lambda 表达式 两者的优点
  • 无法将字符串文字分配给装箱的 std::string 向量

    这是我的类型系统的简化版本 include
  • MySqlConnectionStringBuilder - 使用证书连接

    我正在尝试连接到 Google Cloud Sql 这是一个 MySql 解决方案 我能够使用 MySql Workbench 进行连接 我如何使用 C 连接MySqlConnectionStringBuilder 我找不到提供这三个证书的

随机推荐

  • 为什么当我设置 CurrentCulture 时时区没有改变?

    根据我的研究 不可能更改线程的时区 所以我的问题是why你不能吗 我本以为将应用程序的文化切换到特定国家 地区也会改变这一点 在我看来似乎是预期的行为 Edit 修改后我可以明白为什么它可能不应该默认映射 1 1 的原因 然而 我仍然认为能
  • 如何消除 .dropdown 和 .dropdown-menu 之间的间隙

    在移动视图中时 单击 dropdown菜单之间有一个小空间 dropdown和 dropdown menu 如图所示 Question是否可以消除那个小空间 间隙 Codepen 示例代码视图 http codepen io riwakaw
  • ASP.NET MVC HTTP 发布/删除

    我有一个 ASP NET MVC 应用程序 我有单个函数模式 将通过 HTTP POST 和 HTTP DELETE 调用 尽管调用了 Post 但从未调用过删除 我确认 IIS 接受 HTTP 删除 任何意见 路线和控制器 routes
  • 如何增加 phpMyAdmin 中的导入大小限制

    有谁知道是否或如何可以增加phpMyAdmin 中的导入大小限制 目前我的服务器限制为 50MB 请注意 这与upload max filesize在 php ini 中 该值设置为 2MB 我需要将一张表导入到我的一个数据库中 而 php
  • SQL中表名前面的“#”是什么意思?

    SQL 中名为 mytable 的表和 table 有什么区别 我在很多自定义程序中看到表名以 开头 这些是本地临时表 对于创建它们的进程来说是私有的
  • 将txt文件的全文存储到mongodb中

    我创建了一个 python 脚本 可以自动执行将 PDF 转换为 txt 文件的工作流程 我希望能够在 MongoDB 中存储和查询这些文件 我需要将 txt 文件转换为 JSON BSON 吗 我应该使用像 PyMongo 这样的程序吗
  • 有什么办法可以访问本地网络中的GAE开发应用程序服务器吗?

    如果我通过以下方式访问我的网站http 本地主机 8080 http localhost 8080来自运行服务器的同一台 Win 7 PC 则它可以正常工作 如果我尝试从另一台电脑访问它 使用我的内部电脑的 IPhttp 192 168 1
  • 如果我使用 byte 而不是 int,我的循环迭代速度会更快吗?

    这段代码是否 for byte b 0 b lt 100 b some code 比这段代码运行得更快 for int b 0 b lt 100 b some code 一点都不 如果有的话 它会更慢 因为底层硬件通常具有处理本机 int
  • 如何在 Fortran 中获取未知长度的命令行参数?

    我想从用于运行程序的命令行读取一些文本字符串 我正在使用内部子例程GET COMMAND ARGUMENT在一个基本上是这样的程序中 program test character len 100 argument call GET COMM
  • Java加密问题

    我正在使用 PBE 加密来加密和解密 Android 应用程序上的某些文本 但当我使用错误的私钥解密文本时 我收到 BadPaddingException 并显示 填充块损坏 消息 我的问题是 由于我不太熟悉 Java 中的加密 这是否是加
  • 无法将路由器服务传递给 symfony 2.6 中的 twig 扩展

    我有一个树枝扩展 我试图在其中注入路由器服务 所以 服务 yml app twig extension class SeoReportBundle Twig SeoReportExtension arguments router tags
  • 发布到IIS后.Net core服务不可用

    当我将 up 发布到 IIS 后 当我尝试访问它时 出现错误 暂停服务 http错误503服务不可用 接下来我应该做什么 我使用 Windows Server 2008 64 位 和 IIS 8 5 该应用程序是Web api NET CO
  • php xpath 问题

    我正在尝试使用 xpath 解析 blogspot feed 但它似乎不适用于我尝试的任何内容 我不确定这是因为名称空间还是什么原因 但我希望有人可以帮助我 这是代码 xml simplexml load file http feeds f
  • NS3-如何在模拟运行期间修改点对点通道数据速率

    我是 NS3 新手 正在查看first cc 教程 https www nsnam org doxygen first 8cc source html https www nsnam org doxygen first 8cc source
  • 如何使用新的反应路由器钩子测试组件?

    到目前为止 在单元测试中 React 路由器匹配参数被检索为组件的 props 因此 考虑某些特定匹配和特定 url 参数来测试组件很容易 我们只需在测试中渲染组件时按照我们想要的方式精确匹配路由器匹配的 props 我为此目的使用酶库 我
  • 停止 LINQ to SQL 在插入后执行 select 语句

    我正在使用 LINQ to SQL 来更新我的数据库 我正在插入大量记录 当我调用 SubmitChanges 时 LINQ to SQL 会为每个对象执行一条插入和一条选择语句 我真的不关心将对象插入数据库后更新它们 您知道我可以阻止 L
  • 如何通过代码启用对 URI 类的 IDN/IRI 支持?

    我正在尝试为 URI 类启用 IDN IRI 支持 因为我需要德国变音域 例如 www b cher de 上的 Uri IsWellFormedUriString 方法 我发现类似的问题https stackoverflow com a
  • 如何有效地从控制台读取一行用户输入? [复制]

    这个问题在这里已经有答案了 我最近学会了如何使用读取输入io来自 Rust 文档 但是有没有 simple 读取控制台输入的方法 我的根深植于 C 因此从控制台获取输入就像std cin gt gt var 但在 Rust 中我正在做 fo
  • 如何将此代码转换为使用字符串

    char recursivecombo char str int choices int level int len strlen str level if level choices for int i 0 i lt len 2 i pr
  • 带键的 LINQ groupby 语句

    我的查询的语法很好 但输出却不好 这真的很奇怪 我有下表 AppointID UserID AppointSet AppointResolved AppointStatus AppointmentDatetime 1 1 3 1 2011