Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将Linq结果转换为IEnumerable无效强制转换_C#_.net_Linq_Ienumerable - Fatal编程技术网

C# 将Linq结果转换为IEnumerable无效强制转换

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

针对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.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>();