foreq to linq expression help needed

时间:2018-05-29 11:24:02

标签: c# 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..}
  ));

2 个答案:

答案 0 :(得分:4)

看起来你只想做一个SelectMany来获得产品,然后将它们分组并选择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()
});

答案 1 :(得分:0)

你的非linq代码看起来已经很好了。 您可以使用GroupBy&amp; amp ;;使用linq创建字典。 ToDictionary:

var dictionary = offerings
                .GroupBy(x => x)
                .ToDictionary(x => x.Key, x => x.Count());