返回实体类的列表

时间:2013-06-11 12:39:48

标签: c# list ilist

这是我的班级:

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

返回这些信息

6 个答案:

答案 0 :(得分:3)

您可以使用command.ExecuteReader方法并使用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 implementation
  2. ADO.NET IDataReader界面及其MySql implementation

答案 1 :(得分:1)

您可以使用查询创建datareader。初始化列表后。该做的 while(datareader.read())并在循环内创建一个Customer对象,为读者提供值,最后将其添加到列表中。

答案 2 :(得分:1)

你可以用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
    }
}

答案 3 :(得分:1)

我肯定会推动切换到使用像Entity Framework这样的ORM甚至是Linq to 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;
}

答案 4 :(得分:1)

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

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

     }

答案 5 :(得分:1)

将Model.edmx添加到您的项目中。然后你可以很容易地理解其余部分。它为您创建模型。您无需担心创建类。如果你有桌子关系也很有帮助。您不必编写SQL代码来从数据库写入或读取。

以下是link如何使用EF。

相关问题