C# 如何通过FastMember将枚举自动转换为int?

C# 如何通过FastMember将枚举自动转换为int?,c#,dapper,fastmember,C#,Dapper,Fastmember,我正在使用FastMember将列表转换为数据表。某些类包含枚举,这在将数据表作为TVP传递给存储过程时会导致问题 public class MyObject { public int Id {get; set;} public SomeEnum EnumHere {get; set;} } var dt = new DataTable(); using (var reader = ObjectReader.Create(myObjectsList)) { dt.Loa

我正在使用
FastMember
列表
转换为
数据表
。某些类包含枚举,这在将数据表作为TVP传递给存储过程时会导致问题

public class MyObject
{
    public int Id {get; set;}
    public SomeEnum EnumHere {get; set;}
}

var dt = new DataTable();
using (var reader = ObjectReader.Create(myObjectsList))
{
    dt.Load(reader);
}

db.Execute<ResultObject>("insert_objects", new { dt }, commandType: CommandType.StoredProcedure);
公共类MyObject
{
公共int Id{get;set;}
公共SomeEnum EnumHere{get;set;}
}
var dt=新数据表();
使用(var reader=ObjectReader.Create(myObjectsList))
{
dt.负载(读卡器);
}
Execute(“insert_objects”,new{dt},commandType:commandType.StoredProcedure);
FastMember
转换列表,但是枚举列的数据类型为
SomeEnum
。将datatable作为TVP传递时,会引发以下异常:

引发异常:Dapper.dll中的“System.ArgumentException”

其他信息:不支持列“SomeEnum”的类型。类型为“SomeEnum”


有没有办法强制
FastMember
将枚举转换为int?

您可以使用正确的属性将匿名类型创建为:

var newObjects = from m in myObjectList
                 select new { m.Id, EnumHere = (int)m.EnumHere };

var dt = new DataTable();
using (var reader = ObjectReader.Create(newObjects))
{
    dt.Load(reader);
}

我提出了一个标题编辑,因为这个问题看起来很琐碎,就像FastMember中不支持的一样:你能指定使用Enum会导致什么样的问题吗?嗯,看起来@Michael是对的。也许您可以将数据模型中的枚举更改为int,并提供扩展方法以作为枚举访问它们?