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,并提供扩展方法以作为枚举访问它们?