Linq结果为IEnumerable无效的强制转换

时间:2011-06-22 18:09:28

标签: c# .net linq ienumerable

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

4 个答案:

答案 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>();

我刚添加了通用的类型。