【问题标题】:Linq Expression Builder datetime.year compareLinq 表达式生成器 datetime.year 比较
【发布时间】:2014-10-14 15:39:36
【问题描述】:

目前我正在使用表达式生成器来生成动态查询。

我为 int、日期时间和字符串运算符创建了动态表达式。现在我被困在某一点上。

我想通过表达式比较日期时间的月份部分。

我们正在传递日期时间的属性,并希望为该属性的月份创建表达式。

代码:

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类型的参数表达式。

我想要这个月所有生日的结果。

【问题讨论】:

  • 你的代码现在做什么?
  • @user1522548 这是部分代码,但想法是使用操作符枚举和所有 dayatype 创建动态 linq 查询。我想访问 datetime 数据类型的 year 属性。

标签: linq entity-framework expression-trees dynamic-linq


【解决方案1】:

你可以使用 Expression.PropertyOrField 方法。 但不确定它是否适用于实体框架查询。

http://msdn.microsoft.com/en-us/library/system.linq.expressions.expression.propertyorfield(v=vs.110).aspx

更新

对于实体框架,您可以使用 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

【讨论】:

    【解决方案2】:

    我的问题得到了答案。我做的是这样的......

    代码:

    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);
    }
    

    这里第一个属性引用将给出日期时间表达式。

    再次使用该表达式,我们可以深入一步并可以访问 year 属性。 我们可以在一个月内做同样的事情。

    【讨论】:

      猜你喜欢
      • 2011-04-24
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      • 2019-01-02
      • 2011-05-21
      • 1970-01-01
      • 2015-04-18
      • 1970-01-01
      相关资源
      最近更新 更多