【问题标题】:How to create Linq Expression for DateTime.Date如何为 DateTime.Date 创建 Linq 表达式
【发布时间】:2022-06-10 18:04:28
【问题描述】:

如何为 DateTime.Date 创建 Linq 表达式

例如,

var query = CollectionQuery.OrderBy(c => c.CreatedAtUtc.Date); // where CollectionQuerry is User type
var expressions = query.Expression;

当我调试时,我发现表达式包含表达式类型引用

我希望它是动态的,所以我使用 System.Linq.Expression (ef core 2.2)

ParameterExpression arg = Expression.Parameter(typeof(User), "c");
var memberExpression = Expression.Property(arg, "CreatedAtUtc");
var quoteExpression = Expression.Quote(memberExpression); // no parameter to set .Date

我的问题是我无法使用 .Date 创建表达式,我该如何创建表达式?谢谢。

【问题讨论】:

  • 1) 你必须引用整个Expression.Lambda,而不仅仅是正文。 2)Expression.Property(Expression.Property(arg, "CreatedAtUtc"), "Date")
  • 不要质疑答案。只需添加答案。

标签: c# entity-framework linq


【解决方案1】:

在@Jeremy Lakeman 建议之后

ParameterExpression arg = Expression.Parameter(typeof(User), "c");
var memberExpression = Expression.Property(Expression.Property(arg, "CreatedAtUtc"), "Date"); // add this line
var labmdaExpression = Expression.Lambda<Func<T, DateTime>>(memberExpression, arg);
var quoteExpression = Expression.Quote(labmdaExpression);

当我在调试时查看 quoteExpression 时,它会显示

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多