Linq动态查询 类型的常量值。此前后文仅支持基元类型或枚举类型

Linq动态查询 类型的常量值。此上下文仅支持基元类型或枚举类型。
本帖最后由 hongliangc5dn 于 2014-09-01 11:04:58 编辑
错误:无法创建“CemeterySystem.Models.CardType”类型的常量值。此上下文仅支持基元类型或枚举类型。
代码

IQueryable custs = db.DbCardType;
//创建一个参数  Parame
ParameterExpression param = Expression.Parameter(typeof(CardType), "t");
//t.Name=="身份证"
Expression left = Expression.Property(param, typeof(CardType).GetProperty("Name"));
Expression right = Expression.Constant("身份证");
Expression filter = Expression.Equal(left, right);
Expression pred = Expression.Lambda(filter, param);
//Where(t=>t.Name=="身份证")
Expression expr = Expression.Call(typeof(Queryable), "Where", new Type[] { typeof(CardType) }, Expression.Constant(custs), pred);
//生成动态查询
IQueryable query = db.DbCardType.AsQueryable().Provider.CreateQuery(expr);
return Json(query, JsonRequestBehavior.AllowGet);

Model:

namespace CemeterySystem.Models {
    [Table("CardType")]
    public class CardType {
        [Key]
        [Required]
        [Display(Name = "标识")]
        public int Id { get; set; }
        [Required]
        [Display(Name = "名称")]
        public string Name { get; set; }
        [Required]
        [Display(Name = "标记")]
        public int Flag { get; set; }
    }
}

上下文:

namespace CemeterySystem.DAL {
    public class CemeterySystemContext : DbContext {
        public CemeterySystemContext() : base("DefaultConnection") { }
        public DbSet<CardType> DbCardType { get; set; }       
    }
}

PS:为了方便阅读 删除部无用分字段及代码.
学习网址:
http://www.xker.com/page/e2009/0915/78341.html
Where 查询部分  换到自己的程序上就报这个错误.
Linq动态查询 类型的常量值。此前后文仅支持基元类型或枚举类型
求大神赐教 这个问题已经困扰我好久了.
------解决方案--------------------
Expression left = Expression.Property(param, typeof(CardType).GetProperty("Name"));
这个用MakeMemberAccess代替Property看看
------解决方案--------------------
调试一下,看看具体是哪行代码有异常
------解决方案--------------------
Expression.Constant(expr), pred);

//生成动态查询 之前要加这一句吧?