Ho un database SQLite con una tabella degli event
composta da quattro colonne: id
(INT), timestamp
(TEXT), level
(TEXT) e message
(TEXT). Quando leggo gli eventi, voglio convertire i valori di level
valori di LogLevel
corrispondenti. I valori del testo sono gli stessi dei nomi dei membri enum. Come posso fare questo? Vedo che se uso Query<object>
ottengo una lista in cui posso enumerare tutte le righe e lanciarle prima di aggiungerle ai nuovi valori della struttura di Event
. Ma è questo il modo migliore / più semplice per farlo?
public struct Event
{
public Event(DateTime timestamp, LogLevel level, string message)
{
Timestamp = timestamp;
Level = level;
Message = message;
}
public DateTime Timestamp { get; }
public LogLevel Level { get; }
public string Message { get; }
}
public enum LogLevel
{
FATAL,
ERROR,
WARN,
INFO
}
public List<Event> GetNewEvents(uint rowId)
{
var events = _dbConnection.Query<Event>("SELECT * FROM events WHERE id >= @RowId;", new { RowId = rowId });
return events.ToList();
}
Dapper mapperà automaticamente i valori enum se i valori della colonna 'livello' corrispondono ai valori enum. Comunque potresti avere problemi con quel costruttore. Inoltre non sono sicuro del motivo per cui hai usato struct. Basta cambiare il tuo evento in struct to class below.
public class Event
{
public DateTime Timestamp { get; set; }
public LogLevel Level { get; set; }
public string Message { get; set; }
}
Il riposo è lo stesso.