Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/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
C# LINQ查询中的两个GroupBy_C#_Linq - Fatal编程技术网

C# LINQ查询中的两个GroupBy

C# LINQ查询中的两个GroupBy,c#,linq,C#,Linq,目标: 返回模型的IEnumerable列表 问题: 我试图返回数据库中字段子字符串上的模型和组列表。但是,我需要按第一次分组的两倍进行分组,因为子字符串已经发生,因此实际上没有对任何内容进行分组,因为数据在子字符串之前是唯一的 编辑: 我不需要第一组。我之所以包括它,只是因为这是以前的查询,我不知道如何执行此查询。我需要选择标称周期。获取标称周期的前四个字符。然后在新的“标称周期”上进行分组 名义期限示例-201304 这是由年份和月份组成的。即今天的名义期限为201509年 因此,每当我返回

目标:

返回模型的IEnumerable列表

问题:

我试图返回数据库中字段子字符串上的模型和组列表。但是,我需要按第一次分组的两倍进行分组,因为子字符串已经发生,因此实际上没有对任何内容进行分组,因为数据在子字符串之前是唯一的

编辑:

我不需要第一组。我之所以包括它,只是因为这是以前的查询,我不知道如何执行此查询。我需要选择标称周期。获取标称周期的前四个字符。然后在新的“标称周期”上进行分组

名义期限示例-201304

这是由年份和月份组成的。即今天的名义期限为201509年

因此,每当我返回仅包含前四个字符的标称周期时,每个标称周期将有12个实例,因为一年中有12个月。这就是为什么我需要做第二组

型号:

视图模型:

存储库:


在这种情况下,您可以安全地忽略使用GroupBy

一种方法是像下面这样使用Distinct

    return x.Select(y=>.ToString().Substring(0, 4))
            .Distinct()
            .Select(z=>new YearsModel {Year = z})
            .ToList();

在初始查询中仅选择一列,然后按该列进行分组。为什么?在lambda中,使用ThenBy作为第二个group by示例:.GroupByr=>r.NominatedPeriod.ThenByr=>r。yourProperty@AndrewKilburn:您最终想要不同年份的列表吗?因为x只有一个年+月的属性。如果你只想要不同的年,你不必使用'GroupBy'@AndrewKilburn:请检查我的答案。我用了稍微不同的方法。但是谢谢你!我不需要使用分组方式。我真的很感激
 public class ReportingHubViewModel : ReportViewModel {

        public IEnumerable<YearsModel> Years { get; set; }

        public YearsModel YearsModel { get; set; }

    }
model.Years = detailRepo.GetAllYearsFrom(model.ClientID);
public class SQLDetailRepository : IDetailRepository {
        ApplicationDbContext camOnlineDb = new ApplicationDbContext();
        public IEnumerable<YearsModel> GetAllYearsFrom(int ClientID) {
            var x = (from d in camOnlineDb.Details
                     where d.ClientID == ClientID
                     where d.NominalPeriod != null

                     select new {
                         d.NominalPeriod
                     });

            return x.GroupBy(r => new { r.NominalPeriod })
                .Select(g => new YearsModel {
                    Year = g.Key.NominalPeriod.ToString().Substring(0, 4)
                })//Need another group by here to group after the substring has occrured 
        }
}
    return x.Select(y=>.ToString().Substring(0, 4))
            .Distinct()
            .Select(z=>new YearsModel {Year = z})
            .ToList();