C# 将Linq结果转换为IEnumerable无效强制转换
针对Linq用户的问题:在进行Linq查询后,每当我尝试从C# 将Linq结果转换为IEnumerable无效强制转换,c#,.net,linq,ienumerable,C#,.net,Linq,Ienumerable,针对Linq用户的问题:在进行Linq查询后,每当我尝试从revs获取IEnumerable时,我会得到一个InvalidCastexception:指定的强制转换无效。该数据库已填充,并且应返回值 具体来说,错误发生在行List rev=revs.ToList()上 知道发生了什么事吗 short ret; using (DataContext db = new DataContext()) { var play = from p in db.PDP where p.I
revs
获取IEnumerable
时,我会得到一个InvalidCastexception:指定的强制转换无效。该数据库已填充,并且应返回值
具体来说,错误发生在行List rev=revs.ToList()上代码>
知道发生了什么事吗
short ret;
using (DataContext db = new DataContext())
{
var play = from p in db.PDP
where p.ID == id
select p;
var revs = play.OrderByDescending(p => p.revision);
List<PDP> rev = revs.ToList();
var revNum = revs.ToList().Count() > 0 ? rev.First().revision : 0;
ret = (short)revNum;
}
这不是一个易货吗
rev可能会被转换为IEnumerable,但revs可能仍然是IQueryable
您可以在revs上调用ToList()。声明“rev”列表变量有什么具体原因吗?“Count()”和“First()”在IEnumerable接口(“revs”)上可用
试试这个:
List<PDP> rev = revs.ToList<PDP>();
List rev=revs.ToList();
我刚刚添加了泛型的类型。看起来db.PDP
中的元素不是PDP
的类型,或者如果它是PDP
,它可能在另一个名称空间中。db.PDP和List的数据类型正确吗?我看不出您在哪里调用ToEnumerable
。你到底从哪里得到了例外?@Caspar:那是一样的;他只是在使用类型推断。没有非通用的ToList()
。将其更改为var rev=revs.ToList()代码>帮助?您可以在revs
上调用ToList()
两次。相反,当分配revs
时,您应该调用ToList()
,使其成为List
类型,而不是IEnumerable
,如果这是您想要的。另外,无需在列表上调用Count()
。只需使用效率更高的Count
属性。这里的代码就是我开始使用的代码。我添加了rev以尝试跟踪错误是什么。由于某些原因,我无法将结果从IQueryable
转换为IEnumerable
。这不会有任何区别;类型推断已经在这样做了。(或者它不会编译)
short ret;
using (DataContext db = new DataContext())
{
var play = from p in db.PDP
where p.ID == id
select p;
var revs = play.OrderByDescending(p => p.revision);
ret = (short) revs.Count() > 0 ? revs.First().revision : 0;
}
List<PDP> rev = revs.ToList<PDP>();