按布尔分组产生错误的结果

Grouping By bool produces wrong result

我正在尝试使用 LiveCharts 库在图表中可视化数据库中的数据。我设法让其中一些工作正常。但是,我在使用 PieCharts 时遇到了困难。我想简单地在两个切片中显示数据。就此而言,我在数据库中有一个名为 AppIsRunning 的列。

我做了一个简单的例子,它运行良好,并按预期在切片中显示数据:

  List<DataModel> records = new List<DataModel>();

  records.Add(new DataModel { Id = 1, Revenue = 43, Name = "Item 1", AppIsRunning = true });
  records.Add(new DataModel { Id = 2, Revenue = 23, Name = "Item 2", AppIsRunning = true });
  records.Add(new DataModel { Id = 3, Revenue = 13, Name = "Item 3", AppIsRunning = true });
  records.Add(new DataModel { Id = 4, Revenue = 87, Name = "Item 4", AppIsRunning = true });
  records.Add(new DataModel { Id = 5, Revenue = 23, Name = "Item 5", AppIsRunning = true });

  IEnumerable<ISeries> result1 = records.Select(x =>
    new PieSeries<double>
    {
      Values = new List<double> { x.Revenue },
      Name = x.Name,
    });

现在我想对数据进行分组以仅显示 2 个切片 AppIsRunning true/false 并且值有收入。所以我得到了这段代码:

  List<DataModel> records = new List<DataModel>();

  records.Add(new DataModel { Id = 1, Revenue = 43, Name = "Item 1", AppIsRunning = true });
  records.Add(new DataModel { Id = 2, Revenue = 23, Name = "Item 2", AppIsRunning = true });
  records.Add(new DataModel { Id = 3, Revenue = 13, Name = "Item 3", AppIsRunning = false });
  records.Add(new DataModel { Id = 4, Revenue = 87, Name = "Item 4", AppIsRunning = true });
  records.Add(new DataModel { Id = 5, Revenue = 23, Name = "Item 5", AppIsRunning = true });

  IEnumerable<ISeries> result1 = records
        .GroupBy(g => g.AppIsRunning)
        .Select(item => new PieSeries<double>
        {
          Values = item.Select(x => Convert.ToDouble(x.Revenue)),
          Name = item.Key ? "Running" : "Not running",
        });

然而,这使得 AppIsRunning true 部分分为 4 个子切片 = 4 AppIsRunning TRUE 值。请参阅蓝色切片中包含 4 个子部分的屏幕截图:

我的问题是如何去掉这 4 个子部分并将这些数据组合成一个?我只需要2片,不需要分片

这是来自 LiveCharts 的原始示例:

  this.ActivityChartSeries = new ISeries[]
  {
    new PieSeries<double> { Values = new double[] { 2 }, Name = "Section 1"},
    new PieSeries<double> { Values = new double[] { 21 }, Name = "Section 2"},
    new PieSeries<double> { Values = new double[] { 28 }, Name = "Section 3"},
    new PieSeries<double> { Values = new double[] { 2 }, Name = "Section 4"},
    new PieSeries<double> { Values = new double[] { 52 }, Name = "Section 5"},
  };

https://github.com/beto-rodriguez/LiveCharts2/blob/master/samples/ViewModelsSamples/Pies/Basic/ViewModel.cs

从示例来看,您希望将总收入(总和)的细目显示为每个状态的单个值。为此,您可以这样做:

IEnumerable<ISeries> result1 = records
    .GroupBy(g => g.AppIsRunning)
    .Select(item => new PieSeries<double>
    {
      Values = new List<double> {item.Sum(x => Convert.ToDouble(x.Revenue))},
      Name = item.Key ? "Running" : "Not running",
    });