C# 使用Dapper将枚举存储为Char

C# 使用Dapper将枚举存储为Char,c#,enums,dapper,C#,Enums,Dapper,我有一个枚举,如: public enum AccountStatus : byte { Locked = (byte)'L', Active = (byte)'A', Deleted = (byte)'D' } 并希望将char值存储在数据库中。 在Dapper中是否有方法使用类型映射或以其他方式定义哪些枚举类型应映射到其char值(用于读取/更新/插入) 匿名类型成员声明符还阻止我在查询中直接将属性强制转换为字符: 正如@TyCobb在评论中提到的,这不是将枚举存储

我有一个枚举,如:

public enum AccountStatus : byte
{
    Locked = (byte)'L',
    Active = (byte)'A',
    Deleted = (byte)'D'
}
并希望将char值存储在数据库中。 在Dapper中是否有方法使用类型映射或以其他方式定义哪些枚举类型应映射到其char值(用于读取/更新/插入)

匿名类型成员声明符还阻止我在查询中直接将属性强制转换为字符:


正如@TyCobb在评论中提到的,这不是将枚举存储为字符的问题,而是如何声明匿名类型属性的问题

匿名类型只能推断和生成“简单属性引用”的名称,而在赋值过程中不会对属性进行任何转换,例如

new { account.AccountStatus }
转换数据或需要重命名属性时,必须明确声明属性名称:

new { Status = (char)account.AccountStatus }
关于读取,您可以通过dapper映射到
char
,然后在select中转换为您的枚举(或以任何最合适的方式转换数据):


我认为你的问题与错误无关。它希望您给它一个属性名,因为它是匿名类型<代码>新的{Foo=(char)account.AccountStatus}谢谢-我仍然希望能够通过类型映射或其他方式以更一般的术语解决这个问题,因此它也适用于ReadsHanks为此-我仍然希望能够通过类型映射或其他方式以更一般的术语解决这个问题,因此它也适用于reads@TJF请参阅更新。可以扩展映射技术以满足类型映射需要。
var result = connection.Query<char>(
    "select char column from table where Status = @Status", 
    new {Status = (char)account.AccountStatus}
).Select(x => (AccountStatus)x).FirstOrDefault();
var result = connection.Query<AccountStatus>(
    "select char column from table where Status = @Status", 
    new {Status = (char)account.AccountStatus}
).FirstOrDefault();