我有一個SQLite數據庫,其中包含一個由四列組成的event
表: id
(INT), timestamp
(TEXT), level
(TEXT)和message
(TEXT)。當我回讀事件時,我想將level
值轉換為相應的LogLevel
枚舉值。文本值與枚舉成員名稱相同。我怎樣才能做到這一點?我看到如果我使用Query<object>
我會得到一個列表,我可以枚舉所有行並在將它們添加到新的Event
結構值之前進行轉換。但這是最好/最簡單的方法嗎?
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將自動映射枚舉值。但是,您可能遇到該構造函數的問題。也不確定你為什麼使用struct。只需將您的事件更改為下面的struct to class。
public class Event
{
public DateTime Timestamp { get; set; }
public LogLevel Level { get; set; }
public string Message { get; set; }
}
休息是一樣的。