【问题标题】:LINQ and order-by a date fieldLINQ 和按日期字段排序
【发布时间】:2016-10-19 15:59:20
【问题描述】:

我有一个非常简单的 LINQ 查询来从表列中选择日期 - 我想按日期值排序:

var allDates = db.Table1.Select(m => m.Date).OrderBy(m => m.Date).Distinct();

但是在运行时,我得到了异常

"The specified type member 'Date' is not supported in LINQ to Entities."

在模型和数据库中,日期字段的类型为“DateTime”。 选择不排序的值可以正常工作。

【问题讨论】:

    标签: c# entity-framework linq


    【解决方案1】:

    您只选择了Date 列,然后您尝试按此Date 的属性Date 进行排序。

    改为:

    var allDates = db.Table1.OrderBy(x => x.Date).Select(x => x.Date).Distinct();
    

    var allDates = db.Table1.Select(x => x.Date).OrderBy(date => date).Distinct();
    

    顺序无关紧要。


    更新:Linq-To-Entities 不support the Date property of DateTime

    如果您需要截断时间并且只想按日期订购,您可以使用EntityFunctions.TruncateTime

    var allDates = db.Table1.Select(x => EntityFunctions.TruncateTime(x.Date)).OrderBy(dt => dt).Distinct();
    

    【讨论】:

    • 如果我没记错的话,DateTimeDate 属性,但是 Linq to Entities 不支持它
    • @AdilMammadov:我需要咖啡:D
    • afaik 就是这样。您需要为此使用DbFunctions.TruncateTime(m.Date)
    • 非常感谢......哇,这么快:-)......带有截断时间的提示是一个不错的插件,我会尝试。
    【解决方案2】:

    如问题The specified type member 'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties

    DateTime.Date 无法转换为 SQL。使用 EntityFunctions.TruncateTime 方法获取日期部分。

    看看这样的东西:

    var allDates = db.Table1.Select(m => DbFunctions.TruncateTime(m.Date)).OrderBy(date => date).Distinct();
    

    【讨论】:

      【解决方案3】:

      你可以这样做

      var allDates = db.Table1.Select(m => m.Date).OrderBy(m => m.Value.Year)
                               .ThenBy(m => m.Value.Month)
                               .ThenBy(m => m.Value.Day).Distinct();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-05
        • 1970-01-01
        • 1970-01-01
        • 2021-09-02
        • 1970-01-01
        相关资源
        最近更新 更多