目前我正在使用表达式构建器进行动态查询生成。
我为int,date time和string运算符创建了动态表达式。现在我陷入了困境。
我想通过表达式比较datetime的月份部分。
我们正在传递datetime的属性,并希望为该属性的月份创建表达式。
代码:
public static Expression GetDynamicquery<TSource>(
string property, object value, ParameterExpression p)
{
var propertyReference = Expression.Property(p, property);
var constantReference = Expression.Constant(value);
var expression = Expression.Equal(propertyReference, constantReference);
MethodInfo method = null;
return Expression.LessThanOrEqual(propertyReference, constantReference);
}
这里的属性是我传递给Tsource的属性名称。
p
是Tsource类型的参数表达式。
我想要像本月所有生日那样的结果。
答案 0 :(得分:0)
你可以使用 Expression.PropertyOrField方法。 但不确定它是否适用于实体框架查询。
更新
对于实体框架,您可以使用SqlFunctions.DatePart方法。
http://msdn.microsoft.com/en-us/library/system.data.objects.sqlclient.sqlfunctions(v=vs.110).aspx
你需要一个Expression.Call来表示它作为一个表达式。
http://msdn.microsoft.com/en-us/library/bb349020(v=vs.110).aspx
答案 1 :(得分:0)
我得到了回答我的问题。我做的就像....
代码:
public static Expression GetDynamicquery<TSource>(
string property, object value, ParameterExpression p)
{
var propertyReference = Expression.Property(p, property);
propertyReference = Expression.Property(propertyReference, "Year");
var constantReference = Expression.Constant(value);
return Expression.Equal(propertyReference, constantReference);
}
这里的第一个属性引用将给出日期时间表达式。
再次使用该表达式,我们可以向内一步并访问年份属性。 我们一个月可以做同样的事情。