从simple.data枚举返回列表

问题描述

| 我试图处理来自simple.data中的选择(查找..,全部等)的结果,但出现错误
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标记.. :)     

解决方法

LINQ方法不适用于从db.Code.All()返回的对象上的主要原因是,在代码中的那一点上,C#编译器不知道它是IEnumerable,所以它无法连接扩展方法。当然,C#编译器不知道对象是什么,因为它是动态的,因此它会传递给它并假定First()方法将在运行时解析。 我已经尝试在较新的发行版中解决此问题,并且支持许多方法,包括ToList,First,FirstOrDefault,Single,SingleOrDefault和其他一些方法。还有更多的东西即将发布(在0.9.x版本中)。 使编译器重新发挥作用的最简单方法是显式指定类型,而不是使用var。例如
IEnumerable<Code> codes = db.Codes.All();
会导致从SimpleQuery类型到IEnumerable类型的\“隐式强制转换\”(之所以引用,是因为它不是真的,但它的行为类似于),此时您可以再次在其上使用LINQ方法。     ,嗯,简单的答案。我使用的是https://github.com/markrendle/Simple.Data/downloads中的最新版本,但实际上应该从nuget http://nuget.org/List/Packages/Simple.Data.Core ..安装: (     ,看来您需要
using System.Linq;
声明。 如果实际错误消息中包含单词“'object \'”,则表明从您的调用返回的
codes
类型是一个对象,而不是您所说的
System.Linq.Enumerable.WhereSelectListIterator<System.Collections.Generic.IDictionary<string,object>,Simple.Data.DynamicRecord>}
,这是导致错误的原因。