大家好,李永京博客里有关于动态select的代码,但这段代码在 EF4.4 、 vs2010中会报异常
“无法创建City类型的常量值,此属性只支持基元类型或枚举类型” //依据IQueryable数据源构造一个查询
IQueryable<City> custs = db.DataBase.Citys;
//组建一个表达式树来创建一个参数
ParameterExpression param =
Expression.Parameter(typeof(City), "c");
//组建表达式树:c.ContactName
Expression selector = Expression.Property(param,
typeof(City).GetProperty("Name"));
Expression pred = Expression.Lambda(selector, param);
//组建表达式树:Select(c=>c.ContactName)
Expression expr = Expression.Call(typeof(Queryable), "Select",
new Type[] { typeof(City), typeof(string) },
Expression.Constant(custs), pred);
//使用表达式树来生成动态查询
IQueryable<string> query = db.DataBase.Citys.AsQueryable()
.Provider.CreateQuery<string>(expr);
//使用GetCommand方法获取SQL语句
//System.Data.Common.DbCommand cmd = db.GetCommand(query);
var result = query.ToList();
请问大家,何解呢?
“无法创建City类型的常量值,此属性只支持基元类型或枚举类型” //依据IQueryable数据源构造一个查询
IQueryable<City> custs = db.DataBase.Citys;
//组建一个表达式树来创建一个参数
ParameterExpression param =
Expression.Parameter(typeof(City), "c");
//组建表达式树:c.ContactName
Expression selector = Expression.Property(param,
typeof(City).GetProperty("Name"));
Expression pred = Expression.Lambda(selector, param);
//组建表达式树:Select(c=>c.ContactName)
Expression expr = Expression.Call(typeof(Queryable), "Select",
new Type[] { typeof(City), typeof(string) },
Expression.Constant(custs), pred);
//使用表达式树来生成动态查询
IQueryable<string> query = db.DataBase.Citys.AsQueryable()
.Provider.CreateQuery<string>(expr);
//使用GetCommand方法获取SQL语句
//System.Data.Common.DbCommand cmd = db.GetCommand(query);
var result = query.ToList();
请问大家,何解呢?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货