c# - 嵌套数组中的 Linq Group By
问题描述
我有一个事件对象列表(列表),方法如下:
Incident
-Title
-Category
-Name
-Subcategory
-Name
我正在寻找一种 Linq 有效的方式,以获取与每个类别和子类别相关的事件计数
- 预期的 obj 结果 -
CategoryName
Count
Subcategories
SubcategoryName
Count
var categoryGroup = incidentsModel.GroupBy(i => i.Category.Name);
var categoryGroupAndSubcategoryGroup = categoryGroup.Select(group =>
{
var subcategories = group.SelectMany(item => item.Category.Subcategories).GroupBy(item => item.Name).Select(item => new IncidentSubcategoriesCount
{
SubcategoryName = item.Key,
SubcategoryCount = item.Count()
});
return new IncidentCategoriesCount
{
CategoryName = group.Key,
catagoryCount = group.Count(),
Subcategories = subcategories
};
});
return categoryGroupAndSubcategoryGroup;
测试@hannan 回答上面的代码返回:
[
{
"categoryName": "Alumbrado",
"catagoryCount": 1,
"subcategories": [
{
"subcategoryName": "Lamparas",
"subcategoryCount": 1
}
]
},
{
"categoryName": "Seguridad",
"catagoryCount": 3,
"subcategories": [
{
"subcategoryName": "Narcotráfico",
"subcategoryCount": 3
},
{
"subcategoryName": "Robo",
"subcategoryCount": 3
}
]
}
]
CategoryName 和 CategoryCount 都可以,错误在 SubcategoriesCount 中,“Narcotrafico”SubcategoryCount 必须为 2,“Robo”SubcategoryCount 必须为 1,因此 Total 为 3。
预期结果
[
{
"categoryName": "Alumbrado",
"catagoryCount": 1,
"subcategories": [
{
"subcategoryName": "Lamparas",
"subcategoryCount": 1
}
]
},
{
"categoryName": "Seguridad",
"catagoryCount": 3,
"subcategories": [
{
"subcategoryName": "Narcotráfico",
"subcategoryCount": 2
},
{
"subcategoryName": "Robo",
"subcategoryCount": 1
}
]
}
]
解决方案
使用 Select Many 然后你可以按照你想要的任何方式进行分组
class Program
{
static void Main(string[] args)
{
List<Incident> indcidents = new List<Incident>();
var results = indcidents.SelectMany(x => x.catogories
.SelectMany(y => y.subcategories.Select(z =>
new { title = x.Title, CategoryName = y.Name, Subcategory = z.Name }
))).ToList();
}
}
public class Incident
{
public string Title { get; set; }
public List<Category> catogories { get; set; }
}
public class Category
{
public string Name { get; set; }
public List<Subcategory> subcategories { get; set; }
}
public class Subcategory
{
public string Name { get; set; }
}
推荐阅读
- android - 3 秒内构建失败 命令:D:\Flutter\myfarmer\android\gradlew.bat app:properties
- list - 你如何将数字列表转换为haskell中的范围列表?
- string - 如何有效地从文件和前缀文件中读取函数名并在 Bash 中使用所述函数名?
- django - 带有 Django 的简单缩略图引发访问被拒绝错误
- python - ipdb set_trace() 在 spyder 中无法正常工作
- facebook - "App not setup: This app is still in development mode" Ionic 4 Facebook login
- angular - Set custom validation error using subscribe
- aws-lambda - 带有rds mysql DDL命令的aws lambda不起作用
- android - Room DB runs on main thread when configured not to during instrumented test
- javascript - Jquery drop not fired