加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 将func作为参数传递给异步方法时出错

发布时间:2020-12-16 00:22:37 所属栏目:百科 来源:网络整理
导读:我正在修改现有项目以利用EF6(alpha3)异步扩展方法.我有一个方法,它接受一个func参数,它被传递到 linq到实体查询.以下是工作代码的示例,pre-async: public IEnumerabletype GetTypeSet(FuncType,bool predicate) { return dbSet.Where(d = d.isPublic == tr
我正在修改现有项目以利用EF6(alpha3)异步扩展方法.我有一个方法,它接受一个func参数,它被传递到 linq到实体查询.以下是工作代码的示例,pre-async:

public IEnumerable<type> GetTypeSet(Func<Type,bool> predicate)
    {
        return dbSet.Where(d => d.isPublic == true).Where(predicate).tolist();
    }

应用异步后:

public async Task<IEnumerable<Type>> GetTypeSet(Func<Type,bool> predicate)
    {
        return await(dbSet.Where(d => d.isPublic == true)
        .Where(predicate)).ToListAsync();
    }

此时,我收到一条错误,指出IEnumerable没有ToListAsync的定义.如果我删除.Where(谓词)它正常运行.

我很好奇我是否正确地解决了这个问题,或者在使用异步时传递谓词的更好选择.

解决方法

你的.Where(谓词)正在使用IEnumerable.Where扩展方法,而不是IQueryable.Where.

这意味着,谓词正在您的应用程序中运行,而不是在数据库服务器上运行.

如果要使用IQueryable.Where,则必须将谓词作为表达式< Func< type,bool>>传递. – 表达式树 – 不作为委托.

所以,只需将方法签名更改为:

public async Task<IEnumerable<Type>>
  GetTypeSet(Expression<Func<Type,bool>> predicate)
{
  ...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读