使用 LINQ 获取日期时间值

本文关键字:时间 取日期 获取 LINQ 使用 | 更新日期: 2023-09-27 18:33:43

我对 Linq 很陌生,所以这个简单的问题让我卡住了: 我想要的只是从查询中获取日期时间值:

  var queryW = (from r in aTable.AsEnumerable()
                    where r.Field<string>("Department") == "Workshop"
                    select r.Field<DateTime>("LastCall"));

并将其从var转换为datetime

  DateTime AliveW = Convert.ToDateTime(queryW);

这会导致异常:

Additional information: Unable to cast object of type 'System.Data.EnumerableRowCollection`1[System.DateTime]' to type 'System.IConvertible'.

我也试过

  DateTime AliveW = Convert.ToDateTime(queryW.FirstOrDefault<DateTime>);
   DateTime AliveW = Convert.ToDateTime(queryW.First<DateTime>);

没有运气

使用 LINQ 获取日期时间值

您拥有的查询将返回一个IEnumerable<DateTime>,即可以枚举/迭代的DateTime集合,但您尝试只获取一个DateTime。你只想要第一个,即

var queryW = (from r in aTable.AsEnumerable()
                where r.Field<string>("Department") == "Workshop"
                select r.Field<DateTime>("LastCall")).First();

请注意,如果集合中没有DateTime,这将引发异常,在这种情况下,您可能需要使用 FirstOrDefault() ,在集合不包含任何DateTime的情况下,它将返回default(DateTime)

linq 查询不会像您想象的那样返回单个值。 该错误告诉您正在获取行集合类型的枚举。 如果您确定查询应返回一个值,则可以添加 .单() 或 .First() 调用查询的末尾。

var queryW = (from r in aTable.AsEnumerable()
            where r.Field<string>("Department") == "Workshop"
            select r.Field<DateTime>("LastCall")).FirstorDefault();

尝试使用 var 而不是日期时间

var AliveW = Convert.ToDateTime(queryW);

您可以使用类似的东西

 DateTime usTime = (DateTime)(aTable.AsEnumerable().Where(r=>r.Name=="Reporter").Select(r => r.UsTime).First());

试试这个,如果有效,请将其标记为答案