带有 DbSet 的 LINQ ToListAsync 表达式

Posted

技术标签:

【中文标题】带有 DbSet 的 LINQ ToListAsync 表达式【英文标题】:LINQ ToListAsync expression with a DbSet 【发布时间】:2014-08-07 04:11:40 【问题描述】:

我编写了一个 C# MVC5 Internet 应用程序,并且有一个关于使用 .ToListAsync LINQ 表达式的问题。

这是我在索引操作结果中工作的代码:

IEnumerable<IMapLocationItem> mapLocationImageGalleries = await db.mapLocationImageGalleries.Where(m => m.userName.Equals(userName)).ToListAsync();
IEnumerable<IMapLocationItem> mapLocationVideoGalleries = await db.mapLocationVideoGalleries.Where(m => m.userName.Equals(userName)).ToListAsync();
IEnumerable<IMapLocationItem> mapLocationItemsCombined = mapLocationImageGalleries.Concat(mapLocationVideoGalleries);

我想为上面的代码创建一个服务函数。这是我的编码:

public async Task<IEnumerable<IMapLocationItem>> GetAllMapLocationItemsFromUserName(string userName)

    IEnumerable<IMapLocationItem> mapLocationImageGalleries = await db.mapLocationImageGalleries.Where(m => m.userName.Equals(userName)).ToListAsync();
    IEnumerable<IMapLocationItem> mapLocationVideoGalleries = await db.mapLocationVideoGalleries.Where(m => m.userName.Equals(userName)).ToListAsync();
    IEnumerable<IMapLocationItem> mapLocationItemsCombined = mapLocationImageGalleries.Concat(mapLocationVideoGalleries);
    return mapLocationItemsCombined;

我收到以下错误:

Error   17  'System.Linq.IQueryable<CanFindLocation.Models.MapLocationItems.MapLocationImageGallery>' does not contain a definition for 'ToListAsync' and no extension method 'ToListAsync' accepting a first argument of type 'System.Linq.IQueryable<CanFindLocation.Models.MapLocationItems.MapLocationImageGallery>' could be found (are you missing a using directive or an assembly reference?)

完全相同的代码在 Index 操作结果中可以正常工作,但在服务方法中却不行。为什么会这样?我怎样才能让它发挥作用?

提前致谢

【问题讨论】:

你有正确的 using 语句吗? using System.Data.Entity 【参考方案1】:

如 cmets 中所述,添加 using System.Data.Entity(在实体框架包下)以获取 QueryableExtensions

对于.NET Core,这些方法在Microsoft.EntityFrameworkCore

【讨论】:

补充一点:QueryableExtensions 在实体框架包中。 知道 .NET Core 中应该是什么吗? @mnwsmit 貌似应该在Microsoft.EntityFrameworkCore下 感谢这节省了我的时间,因为我是 .net entity core 的新手 :)

以上是关于带有 DbSet 的 LINQ ToListAsync 表达式的主要内容,如果未能解决你的问题,请参考以下文章

在 DbSet<T> 上使用 LINQ 扩展方法时调用不明确

无法翻译 LINQ 表达式 DbSet<>.Any

在没有 DBSet 的情况下使用 c#linq 执行 SQL Server 存储过程

EF查询 linq写法 DbContext.DbSet<TEntity>

Linq:按计算结果过滤并重用此结果

DbSet 不包含 SaveChanges 的定义