我试图处理来自simple.data的select (Find..、All等)的结果,但收到错误:
var db = Database.Open();
var codes = db.Code.All();
// 'object' does not contain a definition for 'First'
var firstcode = codes.First();
// 'object' does not contain a definition for 'ToList'
List<Code> codeList = codes.ToList();codes的类型为{System.Linq.Enumerable.WhereSelectListIterator<System.Collections.Generic.IDictionary<string,object>,Simple.Data.DynamicRecord>}。
我遗漏了什么?请添加一个simple.data标签..:)
发布于 2011-05-25 19:56:34
多,简单的回答。我使用的是来自https://github.com/markrendle/Simple.Data/downloads的最新版本,但实际上应该从nuget http://nuget.org/List/Packages/Simple.Data.Core安装它。:(
发布于 2011-08-12 08:31:15
LINQ方法不能处理从db.Code.All()返回的对象的主要原因是,在代码中的这一点上,C#编译器不知道它是一个IEnumerable,所以它不能连接扩展方法。当然,C#编译器不知道该对象是什么,因为它是动态的,所以它传递该对象并假定在运行时将解析第一个()方法。
我试图在最近的版本中解决这个问题,并且支持许多方法,包括ToList、First、FirstOrDefault、Single、SingleOrDefault和其他一些方法。还有更多的功能即将推出(在0.9.x版本中)。
使编译器完全生效的最简单方法是显式指定类型,而不是使用var。例如
IEnumerable<Code> codes = db.Codes.All();将导致从SimpleQuery类型到IEnumerable类型的“隐式转换”(引用,因为它不是真正的类型,但它的行为类似于隐式转换),此时您可以再次开始对其使用LINQ方法。
发布于 2011-05-25 19:07:29
看起来你需要一个using System.Linq;声明。
如果实际的错误消息包含单词' object‘,则表明从调用返回的codes类型是对象,而不是您所说的System.Linq.Enumerable.WhereSelectListIterator<System.Collections.Generic.IDictionary<string,object>,Simple.Data.DynamicRecord>},这将是导致错误的原因。
https://stackoverflow.com/questions/6123318
复制相似问题