【问题标题】:LINQ query not grouping properlyLINQ 查询未正确分组
【发布时间】:2012-12-30 04:01:11
【问题描述】:

我正在尝试提取在一组数据中多次出现的一组记录。我的问题是我的查询没有考虑到初始查询的分组,基本上是在提取所有记录。我有一个从数据表中提取数据的初始查询,如下所示:

Dim eDTKBase = From eDTKData In dteDTK _
Select New With _
{ _
.eDTK_PDP_Code = eDTKData.Field(Of String)("PDP_CODE"), _`
.eDTK_PDP_Description = eDTKData.Field(Of String)("PDP_DESCRIPTION"), _
.eDTK_WB_Slave = eDTKData.Field(Of String)("WALLBOARD_OR_SLAVE"), _
.eDTK_Print_On_DAD = eDTKData.Field(Of String)("PRINT_ON_DAD"), _
.eDTK_PLI = eDTKData.Field(Of String)("COMPASS_PLI"), _
.eDTK_Dead = eDTKData.Field(Of String)("DEAD"), _
.eDTK_Instance = eDTKData.Field(Of String)("COUNTRY_INSTANCE") _
}

然后,我尝试使用以下 LINQ 查询仅针对由 eDTK_PLI、eDTK_PDP_Code 字段分组的记录来筛选 eDTK_PDP_Code 字段的计数大于 1 的记录:

Dim EDTKMultPDPtoPLI = From EDTK In eDTKBase _
Group By EDTK.eDTK_PLI, _
EDTK.eDTK_PDP_Code _
Into g = Group _
Where eDTK_PDP_Code.Count > 1 _
Select eDTK_PLI, _
eDTK_PDP_Code, _
eDTK_PDP_Code.Count

问题在于它正在评估数据表中的整个数据集,而不仅仅是分组记录。我在这里做错了什么?谢谢。

【问题讨论】:

  • 评估是什么意思? 小组赛阶段之前,您似乎没有进行任何过滤,因此您必须遍历整个数据库才能确定哪些组有多个记录。
  • 我注意到另一个例子,它使用 g 进行过滤。那么,eDTK_PDP_Code.Count > 1 会起作用吗?我正在尝试通过示例设置我的 LinqPad,因此我将尝试更详细地查看该问题。

标签: vb.net linq


【解决方案1】:

我做了一些实验,我想我找到了解决方案。这是使用 AdventureWorks 的代码,但我认为它应该有意义。

from r in (
     from s in SalesOrderHeaders
     select s.SalesPersonID,s.CustomerID
     where SalesPersonID isnot nothing)
group r by key = new with {r.SalesPersonID,r.CustomerID} into group
where group.count > 1
select key.SalesPersonID, key.CustomerID, group.count()

通过此结果,显示客户与给定销售人员下订单的次数。

RepID   CustID  Count
280     1       4
283     2       8
275     3       6
277     3       6
275     4       6
277     4       2
281     5       8

截取余数

希望对你有帮助

韦德

【讨论】:

    猜你喜欢
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 2016-03-09
    • 1970-01-01
    相关资源
    最近更新 更多