【发布时间】:2015-11-03 09:32:58
【问题描述】:
尝试在IEnumerable.SelectMany 中使用async lambda 时出现以下错误:
var result = myEnumerable.SelectMany(async (c) => await Functions.GetDataAsync(c.Id));
方法 'IEnumerable 的类型参数 System.Linq.Enumerable.SelectMany(这个 IEnumerable, Func>)' 不能 从用法推断。尝试明确指定类型参数
其中GetDataAsync定义为:
public interface IFunctions {
Task<IEnumerable<DataItem>> GetDataAsync(string itemId);
}
public class Functions : IFunctions {
public async Task<IEnumerable<DataItem>> GetDataAsync(string itemId) {
// return await httpCall();
}
}
我猜是因为我的GetDataAsync 方法实际上返回了Task<IEnumerable<T>>。但是为什么Select 会起作用,它肯定会抛出同样的错误吗?
var result = myEnumerable.Select(async (c) => await Functions.GetDataAsync(c.Id));
有没有办法解决这个问题?
【问题讨论】:
-
你能提供
Functions.GetDataAsync的声明吗? -
@Grundy
Task<IEnumerable<T>>,但我已将完整声明添加到问题中。其中T与myEnumerable的类型不同 -
@HimBromBeere,选择返回collection of collection,但我认为OP需要简单的collection
-
但是
GetDataAsnyc不返回枚举,而是返回Task。 -
这是一个使用 linq-to-objects 很好地格式化我的代码的 HTTP 请求,不涉及数据层。 @AsadSaeeduddin 也许我的问题是一个糟糕的再现 - 这里有一个 IoC 容器正在发挥作用,将
Functions注入我的班级。myEnumerable只是IEnumable<T>,因为我知道我的业务逻辑是正确的,所以希望这无关紧要。
标签: c# linq lambda linq-to-objects