如何生成由另一个列表中的分组组成的List <keyvaluepair <string,int =“” >>?

时间:2019-05-24 15:26:18

标签: c# linq asp.net-core

我想制作一个包含邮政编码和每个位置居住人数的List<KeyValuePair<string, int>>

数据来自另一个列表,即List<Member>Member类看起来像这样:

public class Member
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Zip { get; set; }
    // some more properties
}

这是我到目前为止的代码:

List<KeyValuePair<string, int>> zipCount = new List<KeyValuePair<string, int>>();
foreach (Member member in members)
{
    zipCount.Add(new KeyValuePair<string, int>(member.Zip, 1));
}

现在,很明显,我缺少一些按邮政编码划分为组成员的linq代码。

这样的linq代码是什么样的?我已经尝试过foreach (Member member in members.GroupBy(g => g.Zip)),但是会引发以下错误消息:

  

InvalidCastException:无法将类型为'System.Linq.Grouping`2 [System.String,SolutionName.Models.Member]'的对象转换为类型为'SolutionName.Models.Member'。

1 个答案:

答案 0 :(得分:3)

这应该有效:

var zipCount = members.GroupBy(m => m.Zip)
    .Select(g => new KeyValuePair<string, int>(g.Key, g.Count()))
    .ToList();