如何解决.Error CS1061 'Task<IEnumerable>' 不包含 'Where' 的定义并且没有可访问的扩展方法 'Where'
我的通用存储库如下(我有类似的同步和它的工作原理)
public virtual async Task<IEnumerable<TEntity>> GetAsyn(
Expression<Func<TEntity,bool>> filter = null,Func<IQueryable<TEntity>,IOrderedQueryable<TEntity>> orderBy = null,string includeProperties = "")
{
IQueryable<TEntity> query = dbSet;
if (filter != null)
{
query = query.Where(filter);
}
foreach (var includeProperty in includeProperties.Split
(new char[] { ',' },StringSplitOptions.RemoveEmptyEntries))
{
query = query.Include(includeProperty);
}
if (orderBy != null)
{
return await orderBy(query).ToListAsync();
}
else
{
return await query.ToListAsync();
}
}
当我这样称呼时:
var custDB = await unitOfWork.CustomerRepository.GetAsyn().Where(c => c.UserId == userID && c.IsDeleted != true).FirstOrDefault();
...错误 CS1061 'Task
解决方法
因为 GetAsyn()
返回任务。您需要等待任务的结果。
var result = await unitOfWork.CustomerRepository.GetAsyn()
var custDB = result.Where(c => c.UserId == userID && c.IsDeleted != true)
.FirstOrDefault();
,
您可以通过调用
来完成这项工作var customers = await unitOfWork.CustomerRepository.GetAsyn();
var customer = customers.Where(c => c.UserId == userID && c.IsDeleted != true).FirstOrDefault();
但这会在客户端上执行过滤。而且您的“通用存储库”并没有真正做任何有用的事情,因此您应该删除该代码并运行:
var customer = await db.Customers.Where(c => c.UserId == userID && c.IsDeleted != true).FirstOrDefaultAsync();
,
我不确定这是否仍然有效或需要,但这是我的输入
您只需要 ToListAsync() 方法,该方法位于 System.Linq.Async package 中。
一些帮助代码
使用部分:
using System;
sing System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
代码:
public async Task<JsonResult> getgaAreasList()
{
return Json(await new gaAreasVM().GetAll().ToListAsync());
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。