Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用LINQ在C#列表中按多个条件分组?_C#_.net_Linq - Fatal编程技术网

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

如何使用LINQ在C#列表中按多个条件分组?,c#,.net,linq,C#,.net,Linq,我有一个EQModel的列表 public class EQModel { public string IncEpicentre { get; set; } public decimal MagnitudeInMl { get; set; } public int TotalHits { get; set; } } 我想把这个列表分为不同的位置,也可以分为不同的震级sinml值范围 范围:{5,6,7,8} 我可以

我有一个EQModel的列表

public class EQModel
    {
        public string IncEpicentre { get; set; }
        public decimal MagnitudeInMl { get; set; }
        public int TotalHits { get; set; }        
    }
我想把这个列表分为不同的位置,也可以分为不同的震级sinml值范围

范围:{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() });
现在,我想把这两个列表都分组


任何帮助都将不胜感激。

您始终可以使用由两个条件组成的键进行分组。匿名类可用于此目的,如下所示:

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()});

请将您的问题包含在您用于单独分组的LINQ代码中。感谢您提高了问题的参考价值,使其更易于回答!谢谢@Nathan,我在这里做了一些编辑。谢谢@Simon。这对我来说很有用:)如果你将@Simon的答案标记为已接受,你将获得+2个重复点。太棒了@戴维坦西