首页 > 解决方案 > 需要 foreach 到 linq 表达式帮助

问题描述

将以下代码写入一些更好/更少的行时遇到了一些麻烦:)

有人有好的解决方案吗?

//custom implementation for popular filters
        var popularFilter = new Dictionary<string, int>();
        foreach (var car in allFilteredCars)
        {
            foreach (var offering in car.Offerings)
            {
                if (popularFilter.ContainsKey(offering))
                    popularFilter[offering] = popularFilter[offering] + 1;
                else
                    popularFilter.Add(offering, 1);
            }
        }

        categories.Add(new Category
        {
            Name = "popular",
            Code = "popular",
            Values = popularFilter.Select(p => new Value
            {
                Code = p.Key,
                Name = p.Key,
                Count = p.Value
            }).ToList()
        });

如果可能的话,我希望我直接将其添加到categories列表中。

car.offerings=list<string>

所以基本上是这样的:

Categories.Add(allFilteredCars.SelectMany(
 c => c.Offerings.Select(
                o => new {
              something magical here}
  .Select(a => 
     new Category{
         code.. etc etc..}
  ));

标签: c#linq

解决方案


看起来您只想做 aSelectMany来获取产品,然后对它们进行分组并选择Count.

categories.Add(new Category
{
    Name = "popular",
    Code = "popular",
    Values = allFilteredCars.SelectMany(c => c.Offerings)
        .GroupBy(o => o)
        .Select(grp => new Value
        {
            Code = grp.Key,
            Name = grp.Key,
            Count = grp.Count()
        }).ToList()
});

推荐阅读