如何使用LINQ按C#列表中的多个条件进行分组?

时间:2015-05-31 00:38:17

标签: c# .net linq

我有一份EQModel。

public class EQModel
    {
        public string IncEpicentre { get; set; }
        public decimal MagnitudeInMl { get; set; }
        public int TotalHits { get; set; }        
    }

我想将此列表分组为不同的位置以及不同范围的MagnitudesInMl值。

范围:{5,6,7,8}

我可以使用LINQ分别对它们进行分组,但无法使用IncEpicenter和MagnitudeInMl进行分组。

对于按范围分组,我使用了:

var ranges = new[] { 5, 6,7,8 };

var lsGrouped = lsEQData.GroupBy(x => ranges.FirstOrDefault(r => r > x.MagnitudeInMl))
                                .Select(g => new { g.Key,  TotalHits = g.Count().ToString()});

对于IncEpicenter,

 var lsCount = lsEQData.GroupBy(x => x.IncEpicentre)
                          .Select(g => new { g.Key, TotalHits = g.Count().ToString() });

现在,我想将这两个列表分组。

任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

您始终可以使用由您的条件组成的密钥进行分组。可以使用匿名类,如下所示:

var groupedByBothConditions = lsEQData.GroupBy(x => new
{
    Range = ranges.FirstOrDefault(r => r > x.MagnitudeInMl),
    IncEpicentre = x.IncEpicentre
})
.Select(g => new { g.Key,  TotalHits = g.Count().ToString()});