关于LINQ动态查询中动态选择列的问题!

一只熊猫 2012-11-23 12:03:46
大家好,李永京博客里有关于动态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();


请教大家,何解? 谢谢了。
...全文
360 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
q107770540 2012-11-23
  • 打赏
  • 举报
回复
IQueryable<City> custs = db.DataBase.Citys; 从这句可以看出,City是数据库表Citys在edmx文件中的映射实体类
devmiao 2012-11-23
  • 打赏
  • 举报
回复
看看这个:http://stackoverflow.com/questions/3920126/linq-expression-calltypeofqueryable-select
一只熊猫 2012-11-23
  • 打赏
  • 举报
回复
是的
引用 1 楼 q107770540 的回复:
IQueryable<City> custs = db.DataBase.Citys; 从这句可以看出,City是数据库表Citys在edmx文件中的映射实体类
是的。。

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧