簡體   English   中英

C# 嘗試獲取相同ID但多個訂單的數據

[英]C# Trying to GET Data with the same ID but multiple orders

晚上好,

我在使用以下代碼時遇到問題,它可以工作,但它只顯示來自一個 ID 的一個訂單:

namespace ProjectDatabase.Models
{
    public class searchQuery
    {
        public AppDb Db { get; }

        public searchQuery(AppDb db)
        {
            Db = db;
        }

        public async Task<search> FindAllAsync(int id)
        {
            using var cmd = Db.Connection.CreateCommand();
            cmd.CommandText = @"...My Query";
            cmd.Parameters.Add(new MySqlParameter
            {
                ParameterName = "@id_customer",
                DbType = DbType.Int32,
                Value = id,
            });
            var result = await ReadAllAsync(await cmd.ExecuteReaderAsync());
            return result.Count > 0 ? result[0] : null;
        }

        public async Task<search> FindOneIdAsync(int id)
        {
            using var cmd = Db.Connection.CreateCommand();
            cmd.CommandText = @"...My Query";
            cmd.Parameters.Add(new MySqlParameter
            {
                ParameterName = "@id_customer",
                DbType = DbType.Int32,
                Value = id,
            });
            var result = await ReadAllAsync(await cmd.ExecuteReaderAsync());
            return result.Count > 0 ? result[0] : null;
        }

       
        public async Task<List<search>> LatestSearchAsync()
        {
            using var cmd = Db.Connection.CreateCommand();
            cmd.CommandText = @"... My Query";
            return await ReadAllAsync(await cmd.ExecuteReaderAsync());
        }

        private async Task<List<search>> ReadAllAsync(DbDataReader reader)
        {
            var adb_search = new List<search>();
            using (reader)
            {
                while (await reader.ReadAsync())
                {
                    var search = new search(Db)
                    {
                        id_customer = reader.GetInt32(0),
                        delivery_person_name = reader.GetString(1),
                        firstname = reader.GetString(2),
                        lastname = reader.GetString(3),
                        email = reader.GetString(4),
                        order_number = reader.GetString(5),
                    };
                    adb_search.Add(search);
                }
            }
            return adb_search;
        }
    }
}

這將在 Postman 中顯示:

{
    "id_customer": 88,
    "delivery_person_name": "Name",
    "firstname": "firstname",
    "lastname": "lastname",
    "email": "email",
    "order_number": "order"
}

問題是,這個 ID 為 88 的客戶將完成更多訂單,比如 50,但它只顯示第一個訂單,僅此而已。 結束了,其他49個訂單就不會顯示了。

這很奇怪,因為我在這 3 個中還有另一個查詢,用於向我顯示數據庫中的所有用戶,它工作正常並向我顯示所有 100 個用戶,但是對於訂單查詢,它只顯示我 1 個結果,僅此而已。

也許問題是我使用相同的結果來顯示 2 個不同的查詢? 在你問之前,是的,我已經在 SQLyog 中測試了查詢,它顯示了 50 個訂單,但在代碼中它只顯示了第一個訂單。

在你判斷之前,是的,我是 C# 的菜鳥。

謝謝,NewSounD。

問題是FindAllAsync返回Task<search> 你想要一個列表,所以你需要返回Task<List<search>>

這迫使您只返回一個搜索並編寫以下代碼: return result.Count > 0? result[0]: null; return result.Count > 0? result[0]: null; .

固定代碼:

public async Task<List<search>> FindAllAsync(int id)
{
    using var cmd = Db.Connection.CreateCommand();
    cmd.CommandText = @"...My Query";
    cmd.Parameters.Add(new MySqlParameter
    {
        ParameterName = "@id_customer",
        DbType = DbType.Int32,
        Value = id,
    });
    var result = await ReadAllAsync(await cmd.ExecuteReaderAsync());
    return result;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM