如何使用linq商店表达式?

时间:2014-01-27 13:17:05

标签: c# linq entity-framework enums

使用实体框架。试图将值从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'   实体。

1 个答案:

答案 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();

会解决这个错误。