LINQ - 从嵌套列表中获取值的总数

Dem*_*tic 8 c# linq

我有一个Class:

public class Company
{
    public int id { get; set; }
    public string title { get; set; }
    public string address { get; set; }
    public string city { get; set; }
    public string zip { get; set; }
    public List<string> phones { get; set; }
    public List<string> categories { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我有一个Generic List包含Class:

public List<Company> Companies = new List<Company>();

我想做两件事:

  1. 获得一个明确的类别列表
  2. 获得每个类别的公司总数

我想我成功了第一件事:

Companies.SelectMany(c => c.categories).Distinct() 如果您认为有任何问题,请告诉我.

我尝试了第二步: Companies.SelectMany(c => c.categories).Where(c=>c == Category).Count() 但我不确定这是否正确.

SLa*_*aks 7

  1. 正确

  2. 您需要将列表展平为(公司,类别)对,然后按类别分组:

    from company in Companies
    from category in company.Categories
    group company by category into g
    select new { Category = g.Key, Count = g.Count() }
    
    Run Code Online (Sandbox Code Playgroud)

    编辑:如果你想知道一个给定类别中有多少公司,你可以写

    Companies.Count(c => c.Categories.Contains(categoryName))
    
    Run Code Online (Sandbox Code Playgroud)