首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >找不到源tpe的查询模式的实现"Task<List<Stocks>> StockList“选择未找到

找不到源tpe的查询模式的实现"Task<List<Stocks>> StockList“选择未找到
EN

Stack Overflow用户
提问于 2020-05-30 15:55:39
回答 2查看 48关注 0票数 0

我试图通过添加异步/等待查询数据库来改进我的桌面应用程序--这是我的代码

代码语言:javascript
复制
public async Task<List<Stocks>> StockListAsync()
    {
        List<Stocks> stocks = new List<Stocks>();
        {
            conn = await App_Code.DbConnection.InitializeConnectionAsync();               
            string cnt = "SELECT * FROM tblStock";
            cmd = new SqlCommand(cnt, conn);               
            rd = cmd.ExecuteReader();
            if (rd.HasRows == true)
            {
                while (await rd.ReadAsync())
                {
                    var rm = new Stocks
                    {
                        ID = Convert.ToInt32(rd["ID"]),
                        Supplier = Convert.ToInt32(rd["Supplier"]),
                        StockCode = rd["StockCode"].ToString(),
                        StockName = rd["StockName"].ToString(),
                        Description = rd["Description"].ToString(),
                        UnitMeasure = rd["Measurement"].ToString(),
                        Quantity = Convert.ToInt32(rd["Quantity"]),
                        OrderQty = Convert.ToInt32(rd["OrderQty"]),
                        Cost = Convert.ToDouble(rd["Cost"]),
                    };
                    stocks.Add(rm);
                }
            }
            return stocks;
        }



        //}
    }

上面的代码是一个单独的类,名为stock,然后我在windows窗体上显示了我创建的股票类的实例,如这个* readonly =GetStock();*和我还有一个方法GetStock在下面是代码

代码语言:javascript
复制
 void GetStocks()
    {
        var list = stock.StockListAsync();           
            var result = from g in list 
                         select g;
            GrdFood.Rows.Clear();
            foreach (var item in result)
            {
                GrdFood.Rows.Add(GrdFood.RowCount + 1, item.Supplier, item.StockName,
                    item.Description, item.Quantity.ToString("N2"), item.OrderQty.ToString("N2"),
                    Convert.ToDouble(item.Cost).ToString("N2"), item.ID);

            } 
    }

然后,在FormLoad事件(我称为GetStocks )上,问题是下面代码中的列表报告了错误,无法找到源类型Task> StockList select not查找查询模式的实现。

代码语言:javascript
复制
 var list = stock.StockListAsync();           
            var result = from g in list 
                         select g;

在我完成异步任务之前,一切都进行得很好,请如何更正这个实现--谢谢。

EN

回答 2

Stack Overflow用户

发布于 2020-05-30 16:17:36

将方法更改为异步并等待调用stock.StockListAsync。就像这样

代码语言:javascript
复制
async void GetStocks()
{
    var list = await stock.StockListAsync();           
        var result = from g in list 
                     select g;
        GrdFood.Rows.Clear();
        foreach (var item in result)
        {
            GrdFood.Rows.Add(GrdFood.RowCount + 1, item.Supplier, item.StockName,
                item.Description, item.Quantity.ToString("N2"), item.OrderQty.ToString("N2"),
                Convert.ToDouble(item.Cost).ToString("N2"), item.ID);

        } 
}

StockListAsync()正在返回Task<List<Stocks>>而不是List<Stocks>来应用查询,因此出现了错误。

票数 1
EN

Stack Overflow用户

发布于 2020-05-30 16:29:55

因为您没有正确地使用异步/等待,所以list的类型是Task<List<Stock>>,而不是List<Stock>,因为异步就是这样工作的

代码语言:javascript
复制
Task<List<Stock>>list = stock.StockListAsync();   

你真正想要的是:

代码语言:javascript
复制
List<Stock>> list = await stock.StockListAsync().ConfigureAwait(false);

但是,要使用await,函数必须是async

代码语言:javascript
复制
async Task GetStocksAsync() <-- Async functions should have an Async suffix
{
    var list = await stock.StockListAsync().ConfigureAwait(false);
        var result = from g in list 
                     select g;
        GrdFood.Rows.Clear();
        foreach (var item in result)
        {
            GrdFood.Rows.Add(GrdFood.RowCount + 1, item.Supplier, item.StockName,
                item.Description, item.Quantity.ToString("N2"), item.OrderQty.ToString("N2"),
                Convert.ToDouble(item.Cost).ToString("N2"), item.ID);

        } 
}

然后,您的问题是,您需要更改调用GetStocksAsync的代码,使其也是异步/等待等。此时,您可能想知道是否真的值得重新编写已经生效的异步代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62105007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档