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