Linq导致IEnumerable强制转换无效
本文关键字:转换 无效 导致 IEnumerable Linq | 更新日期: 2023-09-27 18:00:08
Linq用户的问题:每当我在进行Linq查询后试图从revs
获得IEnumerable
时,我都会获得InvalidCastexception: Specified cast is not valid
。数据库已填充,并且应该返回值。
具体而言,错误发生在线路List<PDP> rev = revs.ToList<PDP>();
上
你知道发生了什么事吗?
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;
}
编辑
我已经澄清了代码的某些部分。
编辑2rev
作为调试变量存在,以缩小错误所在的范围。
最初的代码是:
short ret;
using (GasForecastDataContext db = new GasForecastDataContext())
{
var play = from p in db.PDP
where p.Play_ID == play_id
select p;
var revs = play.OrderByDescending(p => p.revision);
var revNum = revs.Count > 0 ? rev.First().revision : 0;
ret = (short)revNum;
}
您声明"rev"列表变量是否有特定原因?"Count()"answers"First()"在IEnumerable接口("revs")上可用。
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;
}
db.PDP
中的元素似乎是PDP
之外的某种类型,或者如果它是PDP
,它可能在另一个命名空间中。
它不是仍然是一个IQueryable吗?
rev可能会被铸造成一个IEnumberable,但revs可能仍然是IQuerable。
您可以在revs上调用ToList()。
试试这个:
List<PDP> rev = revs.ToList<PDP>();
我刚刚添加了泛型的类型。