枚举simple.data中的返回列表

Spr*_*tar 2 .net c# 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();
Run Code Online (Sandbox Code Playgroud)

类型codes{System.Linq.Enumerable.WhereSelectListIterator<System.Collections.Generic.IDictionary<string,object>,Simple.Data.DynamicRecord>}.

我错过了什么?有人添加一个simple.data标签请.. :)

Mar*_*dle 6

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

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

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

IEnumerable<Code> codes = db.Codes.All();
Run Code Online (Sandbox Code Playgroud)

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