更改 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.Yellow
、SKColors.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])
});
这有点超出了数据主题,但我一直很难弄清楚如何做到这一点。我有一个图表控件,它为每个图表部分使用颜色。我想为我的图表指定固定颜色,这样它们就不会随机生成。
这是我的 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.Yellow
、SKColors.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])
});