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;
}

编辑
我已经澄清了代码的某些部分。

编辑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;
}

Linq导致IEnumerable强制转换无效

您声明"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>();

我刚刚添加了泛型的类型。