枚举simple.data中的返回列表

时间:2011-05-25 10:54:14

标签: c# .net linq simple.data

我正在尝试从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标签,请:..)

3 个答案:

答案 0 :(得分:6)

LINQ方法对db.Code.All()返回的对象不起作用的主要原因是,在代码中的那一点,C#编译器不知道它是IEnumerable,所以它可以' t挂钩扩展方法。当然,C#编译器不知道对象是什么,因为它是动态的,所以它会传递它并假设在运行时将解析First()方法。

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

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

IEnumerable<Code> codes = db.Codes.All();

将导致从SimpleQuery类型到IEnumerable类型的“隐式强制转换”(引用因为它不是真的,但它就像一个),此时你可以再次开始使用LINQ方法。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

您似乎需要using System.Linq;声明。

如果实际的错误消息包含单词'object',那么它表示从您的调用返回的codes类型是一个对象,而不是您所说的System.Linq.Enumerable.WhereSelectListIterator<System.Collections.Generic.IDictionary<string,object>,Simple.Data.DynamicRecord>},这可能是原因错误。