使用LINQ获取DateTime值

时间:2014-12-10 02:56:23

标签: c# linq

我对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>);

没有运气

4 个答案:

答案 0 :(得分:2)

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

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

请注意,如果集合中没有DateTime,则会抛出异常,在这种情况下,您可能希望使用FirstOrDefault(),如果是default(DateTime),则会返回DateTime 集合不包含任何{{1}}。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

尝试使用var而不是DateTime

var AliveW = Convert.ToDateTime(queryW);

答案 3 :(得分:0)

你可以使用类似的东西

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

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