我刚刚在这里了解了QueryUnbufferedAsyncIAsyncEnumerable https://www.learndapper.com/dapper-query/selecting-unbuffered-async 并想在我自己的数据服务类中使用它,但我做错了事情,因为这不是编译.我想我搞砸了返回数据类型,但我想不出使用它的方法.

下面是我的代码:

private async Task<T> GetAsync2<T>(Func<DbConnection, Task<T>> operation)
{
    if (operation is null) { throw new ArgumentNullException(nameof(operation)); }

    await using DbConnection myCon = new SnowflakeDbConnection("myConnectionString");
    await myCon.OpenAsync();

    var result = await databaseOperation(myCon);

    return result;
}

public async Task<IAsyncEnumerable<T>> GetAllAsync<T>(string sqlSelect) => await GetAsync2(conn => conn.QueryUnbufferedAsync<T>(sqlSelect));

This is the build error I get:

无法从使用情况推断方法"GetAsync 2(Func GbConnection,Task)"的类型参数

推荐答案

QueryUnbufferedAsync返回IAsyncEnumerable.它不是async Task<IAsyncEnumerable,因为IAsyncEnumerablealready对交通友好.

因此,您需要另一个接受非Task委托的超载.

然而,由于它是无缓冲的,因此在读取数据之前无法关闭连接.因此,一旦数据完全读取,您需要(而且无论如何都应该)依赖Dapper来打开和关闭连接.只要您开始操作时连接已关闭,Dapper就可以处理此问题.

private T GetFromDb<T>(Func<DbConnection, T> operation)
{
    // do NOT add using
    var myCon = new SnowflakeDbConnection("myConnectionString");
    var result = operation(myCon);
    return result;
}

public IAsyncEnumerable<T> GetAllAsync<T>(string sqlSelect) =>
    GetFromDb(conn => conn.QueryUnbufferedAsync<T>(sqlSelect));

然而,目前我不确定扰乱代表会得到什么.

Csharp相关问答推荐

在WPF.NET 6中使用C++/WinRT组件(但实际上是任何WinRT组件)

我无法在Ubuntu下编译使用microsoft.extension.configurationbuilder jsonapi和mono mcs的c#应用程序

ASP.NET MVC中创建视图的过滤器

EF Core在请求列表时忽略列,但在按ID获取时包含

选取器与.NET Maui MVVM的绑定属性

内部接口和类的DI解析

正在try 从Blazor中的API读取JSON

正在寻找新的.NET8 Blazor Web应用程序.如何将.js添加到.razor页面?

如果是,我怎么才能让这个加75,如果不是,我怎么才能减go 100?

C#多键字典和TryGetValue

WinUI 3中DoubleCollection崩溃应用程序类型的依赖属性

在C#中有没有办法减少大型数组中新字符串的分配?

单元测试类型为HttpClient with Microsoft.Extensions.Http.Resilience

未显示详细信息的弹出对话框

使用Blazor WebAssembly提高初始页面加载时间的性能

如何从原始图像到新创建的图像获得相同的特定 colored颜色 ,并且具有相同的 colored颜色 量和相同的宽度和高度?

Xamarin.Forms中具有类似AspectFill的图像zoom 的水平滚动视图

在ObservableCollection上使用[NotifyPropertyChangedFor()]源代码生成器不会更新UI

在使用xUnit和Mock执行单元测试时,控制器ViewResult返回空的Model集合

SendInput无法在C#中正确模拟键盘