c# - 使用 LINQ 按字符串出现选择和分组?

标签 c# linq

我有一些数据,我想对其进行计数和分组。它看起来像这样:

猫猫狗狗狗

我的目标是获得一个对象列表,其中包含动物的名称及其在数据集中出现的次数

对象 1

姓名:猫

出现次数:2

对象 2

名字:狗

出现次数:3

我正在尝试使用 LINQ 查询来执行此操作,这就是我所拥有的,但计数是错误的。我认为它是在计算长度而不是它出现的次数。我将如何修改它?

animalData.Select(x => x.AnimalType).Distinct().ToList().ForEach(a => 

    AnimalObject animal = new AnimalObject();

    animal.Name = a.Name;

    animal.Number = a.Distinct().Count();

    animalList.Add(animal);

});

最佳答案

这就是您完成任务所需的全部:

var result = animalData.GroupBy(x => x.AnimalType).Select(g => new AnimalObject 
             {
                 Name = g.Key,
                 Number = g.Count()
             }).ToList();

foreach (var e in result)
    Console.WriteLine($"Name: {e.Name} \n NumberAppearances: {e.Number}");

注意 -

  1. 由于您的 LINQ 查询当前已编写,因此您无需调用 distinctToList,因为前者会产生 在不正确的结果中,后者是不必要的。
  2. 遵循良好的命名约定,您不需要在类型名称后加上 Object 后缀,因此只需 Animal 就足够了。

关于c# - 使用 LINQ 按字符串出现选择和分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46920411/

相关文章:

c# - 使用连接选择多个表中的多个项目

c# - 使用 C# UWP 的 Serilog WriteTo.File

c# - 带有 while (true) 的特殊重载决议

c# - LINQ - 100 个 View - 相同的列 - 通用查询

.net - Find 和 Where().FirstOrDefault() 等价吗?

c# - 使用 LINQ 优化基于值的搜索算法

c# - 提供一系列唯一数字的好方法是什么(C# vs Sql)?

c# - 正则表达式与预期的字符串不匹配

c# - 'DNU RESTORE' 如何确定依赖项是项目引用而不是包引用?

c# - 是否有一个 IEnumerable 实现只迭代一次它的源代码(例如 LINQ)?