LINQ Group by string and count groups属性的子属性

时间:2017-03-06 15:25:07

标签: c# asp.net asp.net-mvc linq asp.net-mvc-5

我写了如下代码:

 Session["priceRange"] = ranges.Select(r => new PriceRangeGraph
                {
                    Price = Math.Round(r, 2),
                    Sales = lista.Where(x => ranges.FirstOrDefault(y => y >= x.SalePrice) == r).Sum(x => x.SaleNumber),
                    SuccessfulSellers = lista.GroupBy(x => x.StoreName).Where(x => ranges.FirstOrDefault(y => y >= x.Select(z => z.SalePrice).FirstOrDefault()) == r && x.Select(h => h.SaleNumber).FirstOrDefault() > 0).Count(),
                    UnSuccessfulSellers = lista.GroupBy(x => x.StoreName).Where(x => ranges.FirstOrDefault(y => y >= x.Select(z => z.SalePrice).FirstOrDefault()) == r && x.Select(h => h.SaleNumber).FirstOrDefault() == 0).Count(),
                }).ToList();

这是两行有问题的代码:

SuccessfulSellers = lista.GroupBy(x => x.StoreName).Where(x => ranges.FirstOrDefault(y => y >= x.Select(z => z.SalePrice).FirstOrDefault()) == r && x.Select(h => h.SaleNumber).FirstOrDefault() > 0).Count(),
UnSuccessfulSellers = lista.GroupBy(x => x.StoreName).Where(x => ranges.FirstOrDefault(y => y >= x.Select(z => z.SalePrice).FirstOrDefault()) == r && x.Select(h => h.SaleNumber).FirstOrDefault() == 0).Count(),

在销售物业中,您可以看到我找到了物品销售的价格范围,然后我只是将给定范围内的所有销售额加起来。

现在,我试图了解有多少成功/不成功的用户(及其用户名)已在指定范围内进行销售。

So for example user test123 made 5 sales, test1234 made 4 sales, test56 made 0 sales in range 0-20$

此范围的输出为:

SuccessfulSellers=2
UnSuccessfulSellers = 1

我尝试过的上面的代码根本没有给我正确的结果...

正如您所看到的,我按用户的用户名分组以获取出现次数,然后过滤用户进行销售的范围,然后只需添加另一个和语句来过滤掉那些销售额为0且销售额超过0的人......

我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

我认为你的问题是操作顺序之一。分组后,您实际上正在处理更复杂的数据结构:基本列表。保存您的小组,直到您的过滤器之后,您的生活将更加轻松。

例如:

allSales.Where(m => m.Price >= 0 && m.Price <= 20)
     .GroupBy(m => m.User)
     .Select(m => new { User = m.Key, Sales = m.Count() });