要清除明显的第一个,我 am :
奇怪的是, intellisense 看到了它,但我有一个编译器警告,它不会编译。
我已经尝试过首先清理项目,重新启动Visual Studio等,它仍在抱怨:
错误CS1929' DbSet'不包含' ToList'的定义和最好的扩展方法重载' Enumerable.ToList(IEnumerable)'需要一个类型为
的接收器
我的接收器"在这种情况下,编译器是静态确定的var
。
这是一台新的笔记本电脑和一个全新的Visual Studio安装......我在这里找不到一些明显的东西吗?
我想要这些internal
但尝试切换所有内容pubilc
只是为了确定,但我收到同样的错误。
大多数人在他们缺少Linq的using子句时会报告这个,但是我有,而 intellisense看到它这是我感到困惑的地方。
有问题的一行:
var excludedUrls = db.ExcludedUrls.ToList<string>();
答案 0 :(得分:0)
我假设您的代码中的数据库是Dbcontext
,其属性ExcludedUrls
的类型为DbSet<TEntity>
DbSet<TEntity>
实施IEnumerable<TEntity>
如果您已添加LINQ
,则可以使用扩展方法Enumerable.ToList<TEntity>()
。
由于您的错误,我认为TEntity不是字符串。如果省略该部分,您的代码将被编译:
var excludedUrls = db.ExcludedUrls.ToList();
但是,这可能不会给出包含所需元素的列表。不知何故,您必须将源序列中的每个excludedUrl转换为您想要的字符串表示形式。如果ToString()不这样做,你必须自己创建一个函数:
class MyDbContext : DbContext
{
public DbSet<MyTSource> ExcludedUrls {get; set;}
}
void string Transform(MyTSource excludedUrl)
{
...
}
List<string> result = dbContext.ExcludedUrls
.Select(excludedUrl => Transform(excludedUrl)
.ToList();
在words:中,从excludedUrls序列中取出每个元素,并使用Transform将其转换为字符串。将生成的字符串序列转换为列表,该列表将是字符串列表
顺便提一下,您是否注意到我使用了ToList
而未提及<string>
?编译器能够检测输入序列中元素的类型,并可以创建相同类型元素的List。
在使用Linq函数时,请考虑避免提及TSource
。这有几个好处:
答案 1 :(得分:0)