日期:2014-05-17  浏览次数:20788 次

关于LINQ动态查询中动态选择列的问题! 发在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();


请问大家,何解呢?