Linq用户的问题:每当我尝试在进行Linq查询后从InvalidCastexception: Specified cast is not valid
获取IEnumerable
时,我都会收到revs
。填充了数据库,应该返回值。
具体而言,错误发生在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;
}
修改
我已经澄清了代码的某些部分。
编辑2
rev
作为调试变量存在,以缩小错误的位置。
原始代码是:
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;
}
答案 0 :(得分:1)
您是否有特定原因要声明“rev”列表变量? IEnumerable接口(“revs”)上有“Count()”和“First()”。
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;
}
答案 1 :(得分:1)
db.PDP
中的元素似乎是PDP
以外的某种类型,或者如果它是PDP
,它可能位于另一个名称空间中。
答案 2 :(得分:0)
它不会仍然是一个IQueryable?
rev可能会被视为IEnumberable,但转速可能仍然是IQueryable。
您可以在转速上调用ToList()。
答案 3 :(得分:0)
试试这个:
List<PDP> rev = revs.ToList<PDP>();
我刚添加了通用的类型。