我正在嘗試進行更復雜的 Linq 查詢,并立即抓住我感覺卡住的一點。我在資料庫中有以下串列:
ID ELAPSED TIME APPISRUNNING
1 12 TRUE
2 54 TRUE
3 32 FALSE
其中 ELAPSED TIME 是 TimeSpan 而 APPISRUNNING 是一個布林值。
我想根據這些值構建一個圖表(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 之后如何創建兩種型別的資料?基本上我需要
- “應用程式運行”和“值”
- “應用程式未運行”和“值”
編輯:
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 提供的示例也可以正常作業。
uj5u.com熱心網友回復:
您可以嘗試執行以下操作:
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()
});
希望這會有所幫助!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/454021.html
