Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal, estou pegando os valores do meu SQLite [Que estão no formato string (No banco de dados) e estou convertendo eles em TimeSpan com C#] meu objetivo é somar as horas. Tenho o seguinte código:
var queryCountHours = conn.Table<RelatorioDB.RelatorioTableCreate>();
string resultHours = String.Empty;
if(queryCountHours != null)
{
foreach (var item in queryCountHours)
{
resultHours = String.Format("{0}", item.Horas);
TimeSpan tsSun = TimeSpan.Parse(item.Horas);
//Aqui eu consigo obter todas as linhas do SQLite na coluna 'Horas',
//porém não consigo somar as horas, elas aparecem da seguinte maneira:
//1:20:00
//1:40:00
//Eu quero somar os valores acima
Debug.WriteLine(tsSun);
//Saída do Debug:
//1:20:00
//1:40:00
}
}
E o fato de estar em um foreach eu não consigo somar as linhas do SQLite. Já tente usar o comando SUM do SQLite porém não funciona, pois está no formato de string no Banco de Dados.
Então como eu posso somar esses valores dentro do foreach?? :( :(
>
var queryCountHours = conn.Table<RelatorioDB.RelatorioTableCreate>();
string resultHours = String.Empty;
if (queryCountHours != null)
{
foreach (var item in queryCountHours)
{
resultHours = String.Format("{0}", item.Horas);
TimeSpan tsSun = TimeSpan.Parse(item.Horas);
//Aqui cada vez que ele passar pelo foreach a variavel totalHoras irá somar
TimeSpan totalHoras = totalHoras + tsSun;
//Aqui eu consigo obter todas as linhas do SQLite na coluna 'Horas',
//porém não consigo somar as horas, elas aparecem da seguinte maneira:
//1:20:00
//1:40:00
//Eu quero somar os valores acima
Debug.WriteLine(totalHoras);
//Saída do Debug:
//1:20:00
//1:40:00
}
}
eu acredito que sejá só adicionar um contador que irá somando as horas cada vez que passar pelo foreach
Não funcionou muito bem. :( mas eu estou tentando outra solução, ao salvar no SQLite eu converto as horas em segundos:
string hoursFormated = this.StopwatchText.Text = string.Format("{0}:{1}:{2}", hours, minutes, seconds).ToString();
string hoursToSecondsFormated = hoursFormated.ToString();
double hoursInSeconds = TimeSpan.Parse(hoursToSecondsFormated).TotalSeconds;
string hoursInSecondsDoubleToString = hoursInSeconds.ToString();
//Com isso o meu timer irá salvar no SQLite em segundos
Debug.WriteLine(hoursInSecondsDoubleToString);
Após salvar no SQLite em segundos eu uso o código abaixo pra retornar o valor em segundos, porém somados:
public RelatorioTableCreate SomaHoras()
{
var sqlPath = System.IO.Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "dbRelatorio.sqlite");
using (SQLite.Net.SQLiteConnection conn = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), sqlPath))
{
var somaDasHoras = conn.Query<RelatorioTableCreate>("SELECT sum(Horas) FROM RelatorioTableCreate").FirstOrDefault();
return somaDasHoras;
}
}
Mas quando eu uso o código abaixo pra retornar esse valor:
RelatorioDB relDB = new RelatorioDB();
Debug.WriteLine(relDB.SomaHoras().ToString());
Ele me retorna o seguinte:
My_App.Models.RelatorioDB+RelatorioTableCreate
E não me retorna o resultado, o código do RelatorioTableCreate é:
public class RelatorioTableCreate
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public string Horas { get; set; }
public RelatorioTableCreate()
{
}
public RelatorioTableCreate(string horas)
{
Horas = horas;
}
}
A classe RelatorioTableCreate fica dentro da Classe RelatorioDB
estranho não ter dado certo o código acima.
Já tentou em vez de usar TimeSpan usar DateTime
DateTime totalHoras = totalHoras.AddHours(tsSun);
o que você fez pode ser uma solução, porém acredito eu que seja muito mais trabalhoso
da uma olhada nesse link aqui, fala sobre como trabalhar com datas e afins
https://ultrago.wordpress.com/2010/06/07/trabalhando-com-datas-no-c/
>
estranho não ter dado certo o código acima.
Já tentou em vez de usar TimeSpan usar DateTime
DateTime totalHoras = totalHoras.AddHours(tsSun);
o que você fez pode ser uma solução, porém acredito eu que seja muito mais trabalhoso
da uma olhada nesse link aqui, fala sobre como trabalhar com datas e afins
https://ultrago.wordpress.com/2010/06/07/trabalhando-com-datas-no-c/
O seu código me retornou o seguinte: :(
13200.00:00:00
28950.00:00:00
46930.00:00:00
Vou dar uma olhada, mas você sabe dizer por que o código não me retorna o valor do SQLite??
Pior que não sei cara :/ estranho não estar somando, teoricamente o código está certo :/ mals não poder ajudar
Você verificou se o timespan está convertendo para horas corretas?
Você verificou se o timespan está convertendo para horas corretas?
Sim, está tudo certinho, quando eu passo pelo foreach os valores com o código abaixo ele me retorna as horas corretamente:
var queryCountHours = conn.Table<RelatorioDB.RelatorioTableCreate>();
if(queryCountHours != null)
{
foreach (var item in queryCountHours)
{
var ts = TimeSpan.FromSeconds(Convert.ToDouble(item.Horas));
string hourConverted = string.Format("H: {0} M:{1} S:{2}", ts.Hours, ts.Minutes, ts.Seconds);
Debug.WriteLine(hourConverted);
//A saída dele é normal. Converte os segundos para Horas
}
}
Porém eu não consigo utilizar isso fora do foreach. Nem consigo somar as horas que o foreach me retorna do SQLite.
Nem mesmo usando o Comando SQLite funciona:
SELECT SUM([Horas]) AS TOTAL FROM RelatorioTableCreate
Que creio eu que pra recuperar o valor com o código acima não seria necessário passar por um foreach. Mas nada [do que eu tento] funciona :(
>
var queryCountHours = conn.Table<RelatorioDB.RelatorioTableCreate>();
string resultHours = String.Empty;
if (queryCountHours != null)
{
foreach (var item in queryCountHours)
{
resultHours = String.Format("{0}", item.Horas);
TimeSpan tsSun = TimeSpan.Parse(item.Horas);
//Aqui cada vez que ele passar pelo foreach a variavel totalHoras irá somar
TimeSpan totalHoras = totalHoras + tsSun;
//Aqui eu consigo obter todas as linhas do SQLite na coluna 'Horas',
//porém não consigo somar as horas, elas aparecem da seguinte maneira:
//1:20:00
//1:40:00
//Eu quero somar os valores acima
Debug.WriteLine(totalHoras);
//Saída do Debug:
//1:20:00
//1:40:00
}
}
eu acredito que sejá só adicionar um contador que irá somando as horas cada vez que passar pelo foreach
srsrs Realmente seu código funcionou. Eu estava errando em não passar os valores formatados pra somar, agora deu certinho. :D :D :D :D Vou abrir um novo tópico com outra dúvida do mesmo assunto.
Você verificou se o timespan está convertendo para horas corretas?
Obrigado também :
Realmente eu não estava convertendo. Vlw pela luz..
//Aqui cada vez que ele passar pelo foreach a variavel totalHoras irá somar
TimeSpan totalHoras = totalHoras + tsSun;
//Aqui eu consigo obter todas as linhas do SQLite na coluna 'Horas',
//porém não consigo somar as horas, elas aparecem da seguinte maneira:
//1:20:00
//1:40:00
//Eu quero somar os valores acima
Debug.WriteLine(totalHoras);
//Saída do Debug:
//1:20:00
//1:40:00
}
}
eu acredito que sejá só adicionar um contador que irá somando as horas cada vez que passar pelo foreach