C# LINQ查询中的两个GroupBy
目标: 返回模型的IEnumerable列表 问题: 我试图返回数据库中字段子字符串上的模型和组列表。但是,我需要按第一次分组的两倍进行分组,因为子字符串已经发生,因此实际上没有对任何内容进行分组,因为数据在子字符串之前是唯一的 编辑: 我不需要第一组。我之所以包括它,只是因为这是以前的查询,我不知道如何执行此查询。我需要选择标称周期。获取标称周期的前四个字符。然后在新的“标称周期”上进行分组 名义期限示例-201304 这是由年份和月份组成的。即今天的名义期限为201509年 因此,每当我返回仅包含前四个字符的标称周期时,每个标称周期将有12个实例,因为一年中有12个月。这就是为什么我需要做第二组 型号: 视图模型: 存储库:C# LINQ查询中的两个GroupBy,c#,linq,C#,Linq,目标: 返回模型的IEnumerable列表 问题: 我试图返回数据库中字段子字符串上的模型和组列表。但是,我需要按第一次分组的两倍进行分组,因为子字符串已经发生,因此实际上没有对任何内容进行分组,因为数据在子字符串之前是唯一的 编辑: 我不需要第一组。我之所以包括它,只是因为这是以前的查询,我不知道如何执行此查询。我需要选择标称周期。获取标称周期的前四个字符。然后在新的“标称周期”上进行分组 名义期限示例-201304 这是由年份和月份组成的。即今天的名义期限为201509年 因此,每当我返回
在这种情况下,您可以安全地忽略使用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();