下面的方法无法编译。有什么替代方案吗?
错误信息:
“TransactionExtensions.GetRecordsAsync(Transaction, string, params SqlParameter[])” 的主体不能是迭代器块,因为“Task>”不是迭代器接口类型。
我看不出如何将此回答适应类似但不同的问题,因为我不知道循环将进行多少次。
编辑:已修正格式。
public static async Task<IEnumerable<object[]>> GetRecordsAsync(
this Transaction transaction,
string commandText,
params SqlParameter[] parameters)
{
// Get a SqlDataReader
var reader = await transaction.GetReaderAsync(commandText, parameters);
var fieldCount = -1;
// Begin iterating through records asynchronously
while (await reader.ReadAsync()) // Note we don't loop until .ReadAsync returns a boolean
{
// Grab all the field values out
if (fieldCount < 0)
fieldCount = reader.FieldCount;
var fields = new object[fieldCount];
reader.GetValues(fields);
// Yield return the field values from this record
yield return fields;
}
}
错误信息:
“TransactionExtensions.GetRecordsAsync(Transaction, string, params SqlParameter[])” 的主体不能是迭代器块,因为“Task>”不是迭代器接口类型。
我看不出如何将此回答适应类似但不同的问题,因为我不知道循环将进行多少次。
编辑:已修正格式。
IEnumerable<T>
本身不支持该功能。请使用响应式扩展(Reactive Extensions)。 - SLaksfields
时将其添加到其中。现在我想起来,也可以通过将 "on fields received" 委托直接传递给该方法来实现。 - IS4