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) { ... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |