将 LinQ 与多列分组一起使用

Posted

技术标签:

【中文标题】将 LinQ 与多列分组一起使用【英文标题】:Using LinQ with group by more than one column 【发布时间】:2013-04-24 12:44:24 【问题描述】:

我是 LinQ 的 Newbi,我对 linQ 中的 group by 有疑问。 我想这样查询:

选择 MAX(TCheckpointGrouping.Id) 作为 CheckpointGroupingId, MAX(TCheckpointGrouping.MCheckpointId) AS CheckpointId, MAX(MCheckpoint.Name) 作为检查点名称, MAX(CAST(MCheckpoint.IsMajor AS VARCHAR)) 作为 IsMajor, MAX(TCheckpointGrouping.MIndicatorId) AS IndicatorId, MAX(MIndicator.Name) 作为指标名称, MAX(MCriteria.Id) 作为 CriteriaId, MAX(MCriteria.Name) AS CriteriaName, MAX(MPrinciple.Id) AS PrincipleId, MAX(MPrinciple.Name) AS PrincipalName, MAX(TCheckpointGrouping.RelationToCheckPoint) AS RelationToCheckPoint 来自 TCheckpointGrouping 在 MCheckpoint.Id = TCheckpointGrouping.MCheckpointId 上内连接 MCheckpoint 内部连接 ​​MIndicator 上 MIndicator.Id = TCheckpointGrouping.MIndicatorId MCriteria.Id = MIndicator.MCriteriaId 上的内部连接 ​​MCriteria 在 MPrinciple.Id = MCriteria.MPrincipleId 上内连接 MPrinciple 通过...分组 TCheckpointGrouping.MCheckpointId, TCheckpointGrouping.MIndicatorId

如何将上面的查询转换为 LinQ (VB.NET)

谢谢 最好的问候

【问题讨论】:

VB.NET LINQ Group By Multiple Columns的可能重复 【参考方案1】:

我很想为您将此 SQL 查询转换为 LINQ,但我认为这会浪费您自学的机会。

Microsoft 提供了一个很棒的页面,其中包含许多 VB.NET Linq 情况:101 Linq Samples。

您甚至可以找到Group By using Multiple Columns 的示例。

好好学习。 :)

【讨论】:

【参考方案2】:

我不确定,但你可以试试。在选择部分我没有包括所有的列。

var result= from TChkgp in TCheckpointGrouping
        join MCpoint in  MCheckpoint on  TChkgp.Id equals MCpoint.Id
    join MIndtor in MIndicator on TChkgp.MIndicatorId equals MIndtor.Id
    join MCrteia in MCriteria on MIndtor.Id equals MIndtor.MCriteriaId
    join MPrncple in MPrinciple on MCrteia.MPrincipleId equals MPrncple.Id
    group TChkgp by new (TChkgp.MCheckpointId,TChkgp.MIndicatorId into g 
    select new 
    CheckpointGroupingId =TChkgp.Id.Max(),
    CheckpointId =TChkgp.MCheckpointId.Max,
    ....
    ....


    ;

你可以在下面的链接中看到一个简单的例子

Group and sum in linq

【讨论】:

以上是关于将 LinQ 与多列分组一起使用的主要内容,如果未能解决你的问题,请参考以下文章

.NET(C#) System.Linq中实现多列group by(分组)的示例代码

groupby java

EF Core 3.1 (LINQ) - 如何在多列上左加入和分组

C#如何将.OrderBy与多列一起使用并将列号解码为列名?

SQL中的Group By的查询过程多列分组的查询过程是怎样的?

如何将多列附加到一列?