微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

.Error CS1061 'Task<IEnumerable>' 不包含 'Where' 的定义并且没有可访问的扩展方法 'Where'

如何解决.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' 不包含 'Where' 的定义并且没有可访问的扩展方法 'Where' 接受类型为“Task”的第一个参数可以 找到(您是否缺少 using 指令或程序集 参考?)..

解决方法

因为 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 举报,一经查实,本站将立刻删除。