首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >枚举来自simple.data的返回列表

枚举来自simple.data的返回列表
EN

Stack Overflow用户
提问于 2011-05-25 18:54:14
回答 3查看 2.7K关注 0票数 2

我试图处理来自simple.data的select (Find..、All等)的结果,但收到错误:

代码语言:javascript
复制
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标签..:)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-25 19:56:34

多,简单的回答。我使用的是来自https://github.com/markrendle/Simple.Data/downloads的最新版本,但实际上应该从nuget http://nuget.org/List/Packages/Simple.Data.Core安装它。:(

票数 2
EN

Stack Overflow用户

发布于 2011-08-12 08:31:15

LINQ方法不能处理从db.Code.All()返回的对象的主要原因是,在代码中的这一点上,C#编译器不知道它是一个IEnumerable,所以它不能连接扩展方法。当然,C#编译器不知道该对象是什么,因为它是动态的,所以它传递该对象并假定在运行时将解析第一个()方法。

我试图在最近的版本中解决这个问题,并且支持许多方法,包括ToList、First、FirstOrDefault、Single、SingleOrDefault和其他一些方法。还有更多的功能即将推出(在0.9.x版本中)。

使编译器完全生效的最简单方法是显式指定类型,而不是使用var。例如

代码语言:javascript
复制
IEnumerable<Code> codes = db.Codes.All();

将导致从SimpleQuery类型到IEnumerable类型的“隐式转换”(引用,因为它不是真正的类型,但它的行为类似于隐式转换),此时您可以再次开始对其使用LINQ方法。

票数 6
EN

Stack Overflow用户

发布于 2011-05-25 19:07:29

看起来你需要一个using System.Linq;声明。

如果实际的错误消息包含单词' object‘,则表明从调用返回的codes类型是对象,而不是您所说的System.Linq.Enumerable.WhereSelectListIterator<System.Collections.Generic.IDictionary<string,object>,Simple.Data.DynamicRecord>},这将是导致错误的原因。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6123318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档