我在使用API,我無法控制哪個返回來自SQL Server的數據,因爲它是List<string>
,每個字符串都有以逗號分隔的列分離。Linq - 如何通過'let'值進行分組,然後求和'let'值
這特定的數據集被返回作爲varchar
和datetime
像這樣:
{
"Prefix_IdentifierA,1/1/1900 12:30:00 AM,",
"Prefix_IdentifierA,1/1/1900 12:15:00 AM,",
"Prefix_IdentifierB,1/1/1900 01:00:00 AM,",
"Prefix_IdentifierB,1/1/1900 12:45:00 AM,"
}
的datetime
僅表示一個時間,因此,所有日期的是相同的。
我需要將其轉換成對象的集合,每個標識符的總時長:
public class Log
{
public string Identifier { get; set; }
public int DurationInSeconds { get; set; }
}
所以結果集合應該是這樣的:
{
Log { Identifier = "IdentifierA", DurationInSeconds = 45 },
Log { Identifier = "IdentifierB", DurationInSeconds = 105 }
}
目前我在做這個在2個Linq查詢中:
1)從每行提取Identifier
和DurationInSeconds
:
var logs1 = (from row in rows
select row.Split(',')
into columns
let identifier = columns[0].Replace("Prefix_", string.Empty)
let duration = DateTime.Parse(columns[1])
let durationInSeconds = duration.Hour * 3600 + duration.Minute * 60 + duration.Second
select new { Identifier = identifier, DurationInSeconds = durationInSeconds }).ToList();
2)通過Identifier
和總和DurationInSeconds
分組:
var logs2 = (from log in logs1
group log by log.Identifier
into grouping
orderby grouping.Key
select new Log { Identifier = grouping.Key, DurationInSeconds = grouping.Sum(log => log.DurationInSeconds) }).ToList();
來自第一查詢匿名類型是一樣的Log
對象,以便有任何方法對這些2次的查詢合併爲一個?
編輯:我迄今取得的進展
我已經identifier
儘可能分組拿到,但不能工作如何再拿到durationInSeconds
的總和:
var logs = (from row in rows
select row.Split(',')
into columns
let identifier = columns[0].Replace("Prefix_", string.Empty)
let duration = DateTime.Parse(columns[1])
let durationInSeconds = duration.Hour * 3600 + duration.Minute * 60 + duration.Second
group rows by identifier
into grouping
select new { Identifier = grouping.Key, DurationInSeconds = grouping.Sum(?????) }).ToList();
嘿,我未刪除我的帖子。我不確定它是否滿足您的問題(至少部分)。 – Kapol
@Kapol - 謝謝,我已經編輯過,並會對你的回答發表評論 – Shevek