我对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>);
没有运气
答案 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());
试试这个,如果有效,请将其标记为答案