GroupBy bool和Select值用于新列表



我正试图进入更复杂的Linq查询,并立即抓住我感到卡住的一点。我在DB中有以下列表:

ID            ELAPSED TIME           APPISRUNNING
1               12                        TRUE
2               54                        TRUE
3               32                        FALSE

其中ELAPSED TIME是TimeSpan,APPISRUNNING是bool。

我想根据这些值建立一个图表(https://github.com/beto-rodriguez/LiveCharts2)。图表构建良好与此:

Title = "Analytics";
this.ActivityChartSeries = new ISeries[]
{
new PieSeries<double> { Values = new double[] { 2 }},
new PieSeries<double> { Values = new double[] { 2 }},
new PieSeries<double> { Values = new double[] { 2 }},
new PieSeries<double> { Values = new double[] { 2 }},
new PieSeries<double> { Values = new double[] { 2 }},
};

现在我不知何故需要先GroupBy bool,然后选择一个新的列表?我尝试过以下内容:

IEnumerable<DataRecord> dataRecords = await this.DataStore.GetItemsAsync();
this.ActivityChartSeries = dataRecords
.GroupBy(g => g.AppIsRunning)
.Select(m => new
{ // BELOW IS TOTALLY UNCLEAR FOR ME
Values = m.Select(r => r.EngineElapsed.Ticks),
Name = m.Select(r => r.Name),
})
.Select(x =>
new PieSeries<double>
{
Values = new List<double> { x.Values.FirstOrDefault() },
Name = x.Name.FirstOrDefault(),
});

指定变量类型:

public IEnumerable<ISeries> ActivityChartSeries

这部分我完全不清楚:

Values = m.Select(r => r.EngineElapsed.Ticks),
Name = m.Select(r => r.Name),

GroupBy之后,我如何创建两种类型的数据?基本上我需要

  1. "应用程序运行";以及";值">
  2. "应用程序未运行";以及";值">

编辑:

Somar Zein提供的代码编译良好:

var results = activityChartSeries
.GroupBy(a=> a.AppIsRunning)
.Select(item=> new PieSeries<double>{
Name = item.Key ? "Application is Running" : "Application is not Running",
Values = item.Select(x=> Convert.ToDouble(x.ElapsedTime.Ticks)).ToList()
});

然而,结果我得到了这样的东西,为什么它在循环中重新加载?

结果如下:在此处输入图像描述


编辑2:

因此,我创建了一个用于测试的示例:

类别:

public class DataModel
{
public int Id { get; set; }
public TimeSpan ElapsedTime { get; set; }
public bool AppIsRunning { get; set; }
}

代码:

List<DataModel> records = new List<DataModel>();
records.Add(new DataModel { Id = 1, ElapsedTime = new TimeSpan(1, 20, 30), AppIsRunning = true });
records.Add(new DataModel { Id = 2, ElapsedTime = new TimeSpan(1, 20, 30), AppIsRunning = true });
records.Add(new DataModel { Id = 3, ElapsedTime = new TimeSpan(1, 20, 30), AppIsRunning = true });
records.Add(new DataModel { Id = 4, ElapsedTime = new TimeSpan(1, 20, 30), AppIsRunning = true });
records.Add(new DataModel { Id = 5, ElapsedTime = new TimeSpan(1, 20, 30), AppIsRunning = true });
this.ActivityChartSeries = records
.GroupBy(g => g.AppIsRunning)
.Select(item => new PieSeries<double>
{
Name = item.Key ? "Running" : "Not Running",
Values = new double[] { 2, 4 },
});

我得到了同样的重新加载效果,即使你最初提供的例子从LiveCharts工作得很好。

您可以尝试执行以下操作:

var results = activityChartSeries
.GroupBy(a=> a.AppIsRunning)
.Select(item=> new PieSeries<double>{
Name = item.Key ? "Application is Running" : "Application is not Running",
Values = item.Select(x=> Convert.ToDouble(x.ElapsedTime.Ticks)).ToList()
});

希望这能有所帮助!

相关内容

  • 没有找到相关文章

最新更新