【问题标题】:Linq Get Latest Date QueryLinq 获取最新日期查询
【发布时间】:2021-06-26 03:52:19
【问题描述】:

我正在尝试根据下面的控制器获取最新日期,但遇到此错误:

“无法将类型为 'System.Data.Entity.Infrastructure.DbQuery1[<>f__AnonymousType201[System.Nullable`1[System.DateTime]]]' 的对象转换为类型 'System.IConvertible'。”

       var latestDt = from n in db.Books
                       where n.id == id
                       select new { Date = n.dtBookBorrowed};


        DateTime dtPlus1Year = Convert.ToDateTime(latestDt);

我可以知道如何在 linq 中仅获取列 latestDate 吗?

【问题讨论】:

  • 类型在 C# 中至关重要。 latestDt 的类型是什么?为什么你认为该类型不能转换为DateTime

标签: asp.net-mvc linq datetime asp.net-mvc-4 max


【解决方案1】:

您可以尝试通过最新插入到数据库来获取日期顺序列表。

var latestDt = db.Books.Where(n => n.id == id).OrderByDescending(x => x.dtBookBorrowed).Select(x => x.dtBookBorrowed).ToList();

【讨论】:

    【解决方案2】:

    我想如果你使用

    DateTime.Parse(item.dateAsString)
    

    你的问题应该解决了。

    【讨论】:

    • 为什么我需要将它解析为字符串,因为我需要它在日期时间?
    • 这正是 DateTime 类想要作为输入参数的内容,作为输出参数,您将获得所需的日期时间。从 var 到 string 应该不是什么大问题。
    【解决方案3】:

    您定义的 LINQ 查询表达式返回一组具有属性 Date 的匿名对象,尽管可能只有一个记录匹配,因为 ID 是唯一的。

    在您的情况下,我们只需要可以解析为 DateTime 的目标字段,因此流畅语法的替代方法如下:-

    var book = db.Books.SingleOrDefault(book => book.id == id); // gets matching book otherwise null
    
    if (book != null)
    {
      var borrowedDate = Convert.ToDateTime(book.dtBookBorrowed);  
    }
    

    否则,如果您想了解更多关于可能返回多个结果的查询语法的行为,您可以简化为以下返回DateTime 对象(即IEnumerable)的集合:-

    IEnumerable<DateTime> borrowedDates =
      from n in db.Books
      where n.id == id
      select Convert.ToDateTime(n.dtBookBorrowed);
    

    【讨论】:

      猜你喜欢
      • 2019-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-08
      • 1970-01-01
      • 2020-07-04
      相关资源
      最近更新 更多