Может быть, не очень разумно хранить информацию о дате / времени как varchar
.Поэтому вам следует подумать об использовании типа столбца datetime
.Кроме того, вам, возможно, следует использовать OR OR (например, EntityFramework) для взаимодействия с вашей базой данных, чтобы вам не пришлось беспокоиться о деталях системы безопасности SQL и т. Д.
Тем не менее, приведен списокпары строк, представляющие время начала и даты события:
public class EventData
{
public string Start { get; set; }
public string End { get; set; }
public TimeSpan CalculateDuration()
{
if (String.IsNullOrEmpty(Start)
|| String.IsNullOrEmpty(End))
{
// What should happen, if start or end is not set?
}
// What should happen, if parsing fails?
var start = DateTime.Parse(Start);
var end = DateTime.Parse(End);
// What should happen, if start is later then end??
return end - start;
}
public override string ToString()
{
return $"{Start} - {End} => {CalculateDuration()}";
}
}
private static readonly Random random = new Random();
private static EventData CreateSample()
{
var now = DateTime.UtcNow;
var start = now.AddSeconds(random.Next(1000));
var end = start.AddSeconds(random.Next(1000));
return new EventData
{
Start = start.ToString(),
End = end.ToString()
};
}
С помощью этих помощников теперь мы можем довольно легко вычислить суммы:
private static void Main(string[] args)
{
var someEvents = Enumerable
.Range(1, 10)
.Select(_ => CreateSample())
.ToList();
foreach (var item in someEvents)
{
Console.WriteLine(item);
}
// Here we calculate the sum, by using .Aggregate()
var all = someEvents.Aggregate(TimeSpan.Zero, (sum, item) => sum + item.CalculateDuration());
Console.WriteLine(all);
Console.WriteLine("Finished");
Console.ReadKey();
}
Последнее, но не менее важное: этот кодпример действительно только пример.Таким образом, неправильно хранить и использовать значения (например, хранить даты в виде строки, вычислять продолжительность каждый раз, а не только один раз, без проверки аргументов, без обработки исключений и т. Д.).Поэтому, пожалуйста, продолжайте учиться и попытайтесь выяснить, что же не так в вашем коде и в моем примере.Надеюсь, через несколько месяцев вы посмотрите на этот код и будете думать так же.Попробуйте выяснить, как использовать что-то вроде EF или Dapper, и на последнем шаге вы можете начать думать о LINQ.