从类型'System.Linq.IQueryable <classx>'转换为'ClassX'的错误</classx>

时间:2012-03-30 07:20:06

标签: c# linq visual-studio-2008 casting iqueryable

我有一个Linq查询,它返回IQueryable<ClassX>类型的对象。我想将此对象放入类类型ClassX的对象中并收到错误:

  

无法将'System.Linq.IQueryable<ClassX>'类型隐式转换为   'ClassX'。存在显式转换(您是否错过了演员?)

这就是我要做的事情:
GetResult()会返回IQueryable<ClassX>个对象。

ClassX x = GetResult();

我尝试过像ClassX x = (ClassX)(GetResult());这样的投射 - 但它不起作用。

3 个答案:

答案 0 :(得分:4)

您可能知道,您的LINQ查询返回IQueryable<ClassX>。这表示具有结果集的查询。它不代表结果本身的对象,所以你不能像那样抛出它。

如果您的方法只返回一个ClassX对象,则可以使用.Single()从结果集中获取该对象:

ClassX x = GetResult().Single();

如果结果集可能为空,则为.SingleOrDefault()

ClassX x = GetResult().SingleOrDefault();

答案 1 :(得分:2)

IQueryable是对象的“集合”,因此要指定“集合中元素的类型项”,您需要选择一个项目。

根据您的需要首先,SkipFirstOrDefault可让您从IQueryable / IEnumerable中选择一个项目:

ClassX x = GetResult().FirstOrDefault();

答案 2 :(得分:0)

var temp = GetResult().AsEnumerable().SingleOrDefault();