日期:2014-05-20  浏览次数:20660 次

关于LINQ动态查询中动态选择列的问题!
大家好,李永京博客里有关于动态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();


请教大家,何解?  谢谢了。

------解决方案--------------------
 IQueryable<City> custs = db.DataBase.Citys;

从这句可以看出,City是数据库表Citys在edmx文件中的映射实体类
------解决方案--------------------
看看这个:http://stackoverflow.com/questions/3920126/linq-expression-calltypeofqueryable-select