[英]how to get multiple records with same id if there is multiple <data> element in c# from xml
[英]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.