返回实体类的列表

本文关键字:列表 实体 返回 | 更新日期: 2023-09-27 18:17:48

这是我的class:

public class Customer
   {
      public int ID { get; set; }
      public string Card_ID { get; set; }
      public double Cash { get; set; }
      public string Name { get; set; }
      public Image Photo { get; set; }
   }  

我需要在我的数据库上做一个SELECT来获得customer的一些信息,我曾经使用DataSet,但我看到它不是最好的选择,当它涉及到性能。此外,我只需要读取2或3个字段,我开始了这个方法:

public List<Customer> ConsultCustomerData(string cardID)
   {
      list<Customer> customer = null;
      string sql = "SELECT name, cash FROM customers WHERE card_id = @cardID";            
       try
          {
             MySqlCommand cmd = new MySqlCommand();
             cmd.CommandText = sql;
             cmd.CommandType = CommandType.Text;
             cmd.Parameters.Add(new MySqlParameter("@cardID", MySqlDbType.VarChar)).Value = cardID;
           }
        catch (Exception ex)
          {
            throw new Exception(ex.Message);
          }
   }  

现在我不知道如何继续…
如何使用ListIList返回这些信息?

返回实体类的列表

可以使用command。方法,并使用reader填充实体数据。

 public List<Customer> ConsultCustomerData(string cardID)
 {
    List<Customer> list = new List<Customer>();
    string sql = "SELECT name, cash FROM customers WHERE card_id = @cardID";        
    MySqlCommand cmd = new MySqlCommand();
    cmd.CommandText = sql;
    cmd.CommandType = CommandType.Text;
    cmd.Parameters.Add(new MySqlParameter("@cardID", MySqlDbType.VarChar)).Value = cardID;
    using (IDbDataReader reader = cmd.ExecuteReader()) {
        while (reader.Read()) {
             list.Add(new Customer { 
                 Name = reader.GetString(0), 
                 Cash = reader.GetDouble(1) 
             });
        }
    }
    return list;
} 

检查:

  1. ADO。. NET IDbCommand接口及其MySql实现
  2. ADO。. NET IDataReader接口及其MySql实现

你可以用你的查询创建一个阅读器。初始化列表后。的做while(datareader.read()),并在循环中创建一个Customer对象,给出reader的值,最后将其添加到列表中。

您可以使用传统的cmd.ExecuteReader()方式或使用像Dapper这样的ORM。

public List<Customer> ConsultCustomerData(string cardID)
{
    const string query = "SELECT name, cash FROM customers WHERE card_id = @cardID";
    try
    {
        using(var connection = new MySqlConnection(connectionString))
        {
            connection.Open();
            return connection.Query<Customer>(query, new { cardID }).ToList();
        }
    }
    catch(Exception ex)
    {
        // Logging, etc..
        Console.Write(ex.ToString());
        throw; //Rethrow exception
    }
}

我肯定会推动切换到使用ORM像实体框架,甚至Linq到SQL -然而,要回答你的问题,你需要读取从查询的信息,即

using (var reader = cmd.ExecuteReader())
{
    List<Customer> customers = new List<Customer>();
    while(reader.Read())
    {
        customers.Add(new Customer
        {
            Name = reader.GetString(0),
            Cash = reader.GetDouble(1)
        });
    }
    return customers;
}

使用SQL Data Reader读取数据,并将相关数据设置为您的实体,并构建如下所示的列表。

    list <Customer> lstCustomer =new list <Customer>();
    while (reader.Read())
    {
         Customer cus=new Customer();
         cus.Card_ID =......
            .............
            ................
            lstCustomer.Add(cus);
     }

添加模型。Edmx到您的项目。然后你就可以很容易地理解剩下的内容了。它为你创建了模型。您不需要担心创建类。如果你有表关系也很有用。您不必编写SQL代码来写入或读取数据库。

这是如何使用EF的链接