【问题标题】:LINQ Group by string and count grouped property's child propertyLINQ 按字符串分组并计数分组属性的子属性
【发布时间】:2017-07-26 13:02:49
【问题描述】:

我写了如下代码:

 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 的那些...

我在这里做错了什么?

【问题讨论】:

  • 有人吗? =)
  • 您能否提供更多关于您的模型的信息(rangeslista),也许还有一些示例记录以及您期望的结果

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


【解决方案1】:

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

例如:

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

【讨论】:

  • 克里斯,我真的不能为到达范围 =(.. 有没有办法将此逻辑合并到我编写的现有查询中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-28
相关资源
最近更新 更多