使用实体框架。试图将值从db转换为其对应的枚举类型。可悲的是,这失败了:
var abc = (from x in db.FooEntities select new { EnumValue = Enum.Parse(typeof(SqlDbType), x.ColumnType }).ToList();
它说linq to entities之类的东西不理解如何处理Enum.Parse。我知道我必须做一些创造表达的事情,甚至继续做这样的事情。
Expression<Func<FooEntity, SqlDbType>> GetDbType()
{
return p => (SqlDbType)Enum.Parse(typeof(SqlDbType), p.ColumnType);
}
现在该如何消费?
我尝试过类似的事情:
var k = GetDbType.Compile();
var abc = (from x in db.FooEntities select new { EnumValue = k(x), x.ColumnType }).ToList();
它仍然会出错,
LINQ to不支持LINQ表达式节点类型'Invoke' 实体。
答案 0 :(得分:0)
实际上,第一个陈述的问题是:
var abc = (from x in db.FooEntities
select new
{
EnumValue = Enum.Parse(typeof(SqlDbType), x.ColumnType)
}).ToList();
是它试图在数据库级别执行select
。将该声明更改为:
var abc = (from x in db.FooEntities select x).ToList()
.Select(x => new
{
EnumValue = Enum.Parse(typeof(SqlDbType), x.ColumnType)
}).ToList();
会解决这个错误。