更改 Linq 中查询之外的值 select

Change value that is outside of query in Linq select

这有点超出了数据主题,但我一直很难弄清楚如何做到这一点。我有一个图表控件,它为每个图表部分使用颜色。我想为我的图表指定固定颜色,这样它们就不会随机生成。

这是我的 linq 查询:

private void PopulateChart()
{
  IEnumerable<ISeries> result = this.DataRecords
        .Where(w => w.TimeNow.Date == this.SelectedDate.Date)
        .GroupBy(g => g.Running)
        .Select(item => new PieSeries<double>
        {
          Values = new List<double> { item.Sum(x => x.Elapsed) },
          Name = item.Key ? "On" : "Off",
          Stroke = null,
          Fill = new SolidColorPaint(SKColors.Yellow)
        });

  this.ChartSeries = new ObservableCollection<ISeries>(result);
}

现在我的颜色总是黄色= SKColors.Yellow。我如何制作一系列颜色。例如 SKColors.YellowSKColors.Blue 然后在我的 Select 中使用它们来为每个部分传递它们?

这是一个数组示例:

private void PopulateChart()
{
  SKColor[] colors = { SKColors.Yellow, SKColors.Blue };

  IEnumerable<ISeries> result = this.DataRecords
        .Where(w => w.TimeNow.Date == this.SelectedDate.Date)
        .GroupBy(g => g.Running)
        .Select(item => new PieSeries<double>
        {
          Values = new List<double> { item.Sum(x => x.Elapsed) },
          Name = item.Key ? "On" : "Off",
          Stroke = null,
          Fill = new SolidColorPaint(colors[0])
        });

  this.ChartSeries = new ObservableCollection<ISeries>(result);
}

所以问题是如何在 colors[0] 中传递 0 然后传递 1?

我们可以尝试使用Select重载方法,可以通过 当前我们迭代的索引号

A transform function to apply to each source element; the second parameter of the function represents the index of the source element.

那我们可以尝试通过索引号使用mod(%)来确定一个是Yellow,另一个是Blue

  IEnumerable<ISeries> result = this.DataRecords
        .Where(w => w.TimeNow.Date == this.SelectedDate.Date)
        .GroupBy(g => g.Running)
        .Select((item,idx) => new PieSeries<double>
        {
          Values = new List<double> { item.Sum(x => x.Elapsed) },
          Name = item.Key ? "On" : "Off",
          Stroke = null,
          Fill = new SolidColorPaint(colors[idx%2])
        });