使用LinQ与group by多列

时间:2013-04-24 12:44:25

标签: vb.net linq group-by

我是LinQ的Newbi,我在linQ中遇到了问题 我想这样查询:

    select
    MAX(TCheckpointGrouping.Id) AS CheckpointGroupingId,
    MAX(TCheckpointGrouping.MCheckpointId) AS CheckpointId,
    MAX(MCheckpoint.Name) AS CheckpointName,
    MAX(CAST(MCheckpoint.IsMajor AS VARCHAR)) AS IsMajor,
    MAX(TCheckpointGrouping.MIndicatorId) AS IndicatorId,
    MAX(MIndicator.Name) AS IndicatorName,
    MAX(MCriteria.Id) AS CriteriaId,
    MAX(MCriteria.Name) AS CriteriaName,
    MAX(MPrinciple.Id) AS PrincipleId,
    MAX(MPrinciple.Name) AS PrincipleName,
    MAX(TCheckpointGrouping.RelationToCheckPoint) AS RelationToCheckPoint
    from TCheckpointGrouping
    inner join MCheckpoint on MCheckpoint.Id = TCheckpointGrouping.MCheckpointId
    inner join MIndicator on MIndicator.Id = TCheckpointGrouping.MIndicatorId
    inner join MCriteria on MCriteria.Id = MIndicator.MCriteriaId
    inner join MPrinciple on MPrinciple.Id = MCriteria.MPrincipleId
    group by
    TCheckpointGrouping.MCheckpointId,
    TCheckpointGrouping.MIndicatorId

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

感谢 bestRegards

2 个答案:

答案 0 :(得分:2)

我很想把这个SQL查询转换为LINQ给你,但我认为这样做会浪费你自己学习的机会。

有很多来自Microsoft的很多VB.NET Linq情况的页面:101 Linq Samples

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

良好的学习。 :)

答案 1 :(得分:0)

我不确定这一点,但你可以尝试一下。在选择部分中,我没有包括所有列。

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

相关问题