【发布时间】:2017-03-02 22:43:06
【问题描述】:
首先要弄清楚显而易见的事情,我是:
- 使用 System.Linq;
- 使用 System.Collections.Generic;
- 拥有对 System.Core 的项目引用
- 我的 DbSet 和 DbContext 类定义正确
奇怪的是,intellisense 看到了,但是我有一个编译器警告,它不会编译。
我尝试过先清理项目,重新启动 Visual Studio 等,但它仍然在抱怨:
错误 CS1929“DbSet”不包含“ToList”的定义,并且最佳扩展方法重载“Enumerable.ToList(IEnumerable)”需要“IEnumerable”类型的接收器
在这种情况下,我的“接收者”是静态确定的编译器var。
这是一台新的笔记本电脑和全新的 Visual Studio 安装...这里有什么明显的遗漏吗?
我想要这些internal,但尝试切换所有pubilc 只是为了确定,但我遇到了同样的错误。
大多数人在缺少 Linq 的 using 子句时会报告这一点,但我有,并且 intellisense 看到了它,这就是我感到困惑的地方。
有问题的行:
var excludedUrls = db.ExcludedUrls.ToList<string>();
【问题讨论】:
-
“ExcludedUrls”是字符串而不是实体吗?您可以编辑您的问题以包含您的 DbContext 设置吗?
-
请注意,
var不是数据类型,它是根据值/引用分配自动推断数据类型的关键字。检查System.Data.Entity和System.Linq的参考,确保它们已正确注册。你试过db.ExcludedUrls.AsEnumerable().ToList<string>();吗? -
我明确知道
var并且我有一个对System.Data.Linq的项目引用(没有System.Linq)。 Intellisense 仅以通用形式看到AsEnumerable,并希望ExcludedUrls作为类型。 -
通常当您调用
ToLIst时,您不会指定泛型类型,而是让 C# 编译器为您推断它。在您的代码中不这样做的任何原因(显然db.ExcludedUrls不能是DbSet<string>,所以简单的ToList()应该可以工作)? -
@IvanStoev 确实如此。提交作为回复,我会接受。由于扩展方法,我在 Visual Studio 中没有看到任何重载......它向我展示的只是通用选项。删除泛型类型并用直接 ToList() 替换即可解决此问题。
标签: c# entity-framework linq