我写了如下代码:
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的人......
我在这里做错了什么?
答案 0 :(得分:1)
我认为你的问题是操作顺序之一。分组后,您实际上正在处理更复杂的数据结构:基本列表。保存您的小组,直到您的过滤器之后,您的生活将更加轻松。
例如:
allSales.Where(m => m.Price >= 0 && m.Price <= 20)
.GroupBy(m => m.User)
.Select(m => new { User = m.Key, Sales = m.Count() });