我有一个实体类结构,如:
public class Base
{
public int ID { get; set; }
}
public class Instance : Base
{
public int Prop1 { get; set; }
}
我可以像往常一样查询(在IQueryable< Base>上):
.Where(p => (p as Instance).Prop1 == 1)
这很有效....但我需要灵活的表达式,所以我尝试了:
var param = Expression.Parameter(typeof(Base));
var property = typeof(Instance).GetProperty("Prop1");
var constant = Expression.Constant(1);
//NOT WORKING LIKE THIS
var convertedParam = Expression.Convert(param, typeof(Instance));
var memberAccess = Expression.MakeMemberAccess(convertedParam, property);
var equals = Expression.Equal(memberAccess, constant);
这导致一个很好的错误:无法转换类型' Base'输入'实例'。 LINQ to Entities仅支持转换EDM原语或枚举类型。所以我需要一个表达式版本(p作为实例)
我该怎么办(我需要使用表达式......)?
答案 0 :(得分:0)
我使用Expression.TypeAs修复它。 TypeAs与(p作为Instance)相同。
var param = Expression.Parameter(typeof(Base));
var property = typeof(Instance).GetProperty("Prop1");
var constant = Expression.Constant(1);
//WORKING LIKE THIS :)
var convertedParam = Expression.TypeAs(param, typeof(Instance));
var memberAccess = Expression.MakeMemberAccess(convertedParam, property);
var equals = Expression.Equal(memberAccess, constant);