问题标签 [igrouping]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - 使用 group by 子句时,如何在 Linq 查询中进行嵌套投影?
我正在尝试处理从 SQL 返回的分组数据。我正在编写的方法是为“案例状态概述”屏幕提供数据。它必须生成一个嵌套的 XML 文档。
现在,我可以用简单的方法做到这一点,但我正在尝试了解是否可以使用 linq“group by”语句,然后投影已经嵌套的数据。(最简单的方法就是从数据库中以表格方式拉回数据,然后通过它进行循环,形成 Xml 文档以供输出)
这是数据层次结构:
每个案例都有一个债务类型,每个债务类型都有一个客户。
这是检索数据的 SQL:
使用 Linqer 将其转换为:
现在,正如我所提到的,我可以停下来并使用 for 循环来创建 Xml 数据。但我正在尝试创建一个嵌套组 ( IGrouping<ClientName,IGrouping<DebtType,SummaryClass>>
),然后以嵌套格式投影数据。
现在我们使用 LinqToXsd 为 out Xml 文档创建强类型包装器,但本质上这意味着 out 输出类型是:
现在我写了以下Linq:
它连接和分组数据库表,然后尝试将结果投影到 ClientSummary (类名不同,但这是因为上面是输出类的简化视图)。当我一直深入到 Cases 表时,我完全失败了,我发现我并不真正了解如何执行聚合函数。它们似乎只在IGrouping<K, T>
s 上可用,看来我只是感到困惑。
我还需要确保摘要是在服务器端计算的,撤回数百万个案例会很糟糕。
有人可以帮我解决这个问题吗?这甚至可能吗?
问候,
詹姆士。
-------### 更新 1 ###-------
好的,今天又开始做这个了。我决定使用 Linq2SQL 提取 2D 数据包,然后使用 Linq2Objects 重新格式化它。
这是我开始的:
这会运行,但会为每个结果生成一个 Client/DebtType/Summary 集。因此,即使在这种情况下只有一个客户端,我最终还是有 1300 个客户端,全部相同。我将其简化为以下内容:
这产生了 1300 个客户。接下来我尝试了这个:
这会产生一个客户(万岁!)。除了我丢失了所有客户信息(嘘!)猜测它是通过引用而不是内容来比较客户时,我写了以下内容:
那什么也没做。它反复调用GetHashCode()
,我捏造它来强制它为任何匹配的 ClientID 返回相同的哈希码,但它仍然创建了 1300 个客户端组。
问候,
詹姆士。
-------### 更新 2 ###-------
好的,我想我会尝试让 Linq2Sql 输出仅用于分组的简单值:
然后将测试 Linq2Objects 更改为:
这样可行。所以匿名类型以我希望它们的方式进行比较,通过内容而不是引用(显然)这不是:
这仍然会创建 1300 个组。
因此,匿名类型以一种我不理解的神奇方式进行比较。如何让我的Client
班级像匿名类型一样进行比较?
问候,
詹姆士。
-------### 找到解决方案###-------
-------### 非常感谢 Enigmativity ###-------
我需要重写该Equals()
方法而不是实现 == 运算符。现在分组工作了,我有一个很棒的 Xml 文档要reutrn!
非常感谢,
詹姆士。
linq - Linq:创建空的 IGrouping
我想使用 Linq 创建一个函数来总结传入的值序列。该函数应如下所示:
问题是生成的 IDictionary 应该有一个 default(TKey) 条目,即使传入的序列不包含具有该键的值。这可以以纯粹的功能方式完成吗?(不使用可变数据结构。)
我能想到的唯一方法是在查找之前调用 .Union ,然后将其输入字典。但这需要我创建一个空的 IGrouping,如果没有明确的类,这似乎是不可能的。有没有一种优雅的方式来做到这一点?
编辑:我们可以假设 TKey 是一个值类型。
c# - 如何从 IGrouping 获取值
我有一个关于方法IGrouping
的问题Select()
。
假设我有IEnumerable<IGrouping<int, smth>>
这种方式:
哪里list
是List<smth>
。
现在我需要以IGrouping
某种方式将每个值传递给另一个列表:
任何人都可以建议如何在这种情况下List<smth>
从 a 中获取值 ( )吗?IGrouping<int, smth>
c# - 检测是否为 IEnumerable已分组,在检查类型时我得到了一些疯狂的结果
所以我试图弄清楚传递给我的方法的任何随机 IEnumerable 是否已被分组。我的想法是我将以不同的方式处理分组数据。我的问题是IGrouping<>
一个通用接口,它没有实现非通用接口,无论出于何种原因,我都无法用is
语句对其进行测试。
在这里测试一下是我的示例代码:
输出如下:
所以似乎除非我知道被分组的值的类型,否则我无法测试它是否被分组?这是 .Net 框架中的错误吗?
以上结果怎么可能?
编辑:Jon Skeet 的回答已经死了......作为对其他发现自己遇到同样困难的人的礼貌,以下代码完成了检查 IEnumerable 是否被分组的工作(基于 Mr . Skeet 使用 dynamic 关键字的奇思妙想):
假设代码与上面相同:
linq - 在Repeater ItemDataBound 中获取IGrouping 数据
我想在转发器中按年对新闻文章进行分组。格式为:
2010
文章列表
2011
文章列表
我的访问层返回新闻文章的平面列表,特别是 List。因此,我将它们分组并将它们绑定到中继器,如下所示:
问题是试图从 ItemDataBound 事件中获取列表。到目前为止,我有以下内容:
有任何想法吗?
提前致谢!
.net - 分组数据上的淘汰赛 foreach 数据绑定
我试图弄清楚如何使用淘汰赛 foreach 数据绑定遍历 .Net 分组。我遇到的问题是,一旦将 IGroupings 序列化为 JSON,我不知道如何迭代 .Net 集合......
在服务器端,我有一个如下所示的 .Net 对象:
我正在通过将实体Grouped
集合BookingLeg
按其分组来创建属性StartDate
。BookingResult
然后我使用 JSON返回实体。为该Grouped
属性生成的 JSON 如下所示(我已折叠并展开节点,以便您更好地了解生成的内容):
我想在我的客户端上做的是创建一个模板并绑定到敲除 foreach 绑定,将键作为列表标题输出,然后对于该键中的每个值,从该值中输出一些详细信息。它看起来像这样:
我试图这样做:
我知道以上是错误的,因为一个 - 分组中不存在密钥。
有谁知道如何创建模板以正确输出列表中分组的键和值? 顺便说一句,我在这里也使用 jquery mobile(因此是数据角色的东西)。
谢谢!
詹姆士
c# - 从 IGrouping 检索所有值
我目前有:
从这段代码:
PortableKey 的代码是:
基本上过滤和抓取所有重复的文件。我如何得到它,以便我以这种方式拥有所有 FileInfo?
c# - 如何显示 IEnumerable> 使用编辑器模板
我有一堆按页眉分组的项目。
我想在页面上显示它们,标题文本后跟每个单独项目的编辑器模板。
我尝试使用嵌套模板如下:
主页:
ListofGrouping 编辑器模板:
IGrouping 编辑器模板:
这一直有效到最后一行。我得到了所有的标题值,但没有显示单个项目。
如果我不能让它以这种方式工作,我将只使用数据网格并在那里进行分组,但我认为这在 MVC3 中应该是可能的。
c# - 使用 AutoMapper 映射分组集合
我有以下代码不起作用:
我不断收到以下异常:
值 \"System.Collections.Generic.List
1[SCGRE.Business.Model.ZoneDTO]\" is not of type \"System.Linq.IGrouping
2[System.String,SCGRE.Business.Model.ZoneDTO]\" 不能在此通用集合中使用。\r\n参数名称: 值
我不明白为什么它试图将 a 映射List<T>
到 anIGrouping<String, T>
或者我没有正确理解异常......但我基本上有一个IEnumerable<IGrouping<String, Zone>>
并且我想将它映射到IEnumerable<IGrouping<String, ZoneDTO>>
请注意,我创建了一个从Zone
to的地图,ZoneDTO
如下所示:
那是因为这两个类具有几乎完全相同的属性。
有任何想法吗?