C# 从simple.data枚举返回列表

C# 从simple.data枚举返回列表,c#,.net,linq,simple.data,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<

我正在尝试处理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();
代码类型为{System.Linq.Enumerable.WhereSelectListIterator}

我错过了什么?有人添加了一个简单的.data标记,请..:

看起来您需要一个使用系统;声明


如果实际的错误消息包含单词“object”,则表明您的呼叫返回的代码类型是一个对象,而不是您所说的System.Linq.Enumerable.WhereSelectListIterator},这可能是错误的原因。

Doh,简单回答。我使用的是来自的最新版本,但实际上它应该从nuget安装..:

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方法。

我已经有了“using System.LINQ”。我能够在该类中的其他非简单数据收集中执行linqy操作..:请看我答案的第二部分。但该类型是在断点处从Visual Studio调试器复制的,这就是VS所认为的这可能是代码的类型,但不是代码的类型。正如@Manatherin所说,All方法返回一个布尔结果。