简体   繁体   English

将列表转换为C#中的数组

[英]Convert list to array in c#

I have this code 我有这个代码

[WebMethod]
    public static Array[] getStd()
    {        
      List<student> std = new List<student>();

      string mystr = ConfigurationManager.ConnectionStrings["str"].ConnectionString;
      SqlConnection con = new SqlConnection(mystr);
      SqlCommand cmd = new SqlCommand("select * from student");
      con.Open();
      SqlDataAdapter da = new SqlDataAdapter(cmd);
      DataSet ds = new DataSet();
      da.Fill(ds);
      DataTable dt = ds.Tables[0];           

      foreach (DataRow item in dt.Rows)
      {
          student st = new student();
          st.name = item["name"].ToString();
          st.address = item["address"].ToString();
          st.sex = item["sex"].ToString();
          st.email = item["email"].ToString();

          std.Add(st);
          student[] arr = std.ToArray();          
      }    
   }

I want to convert this list to array and then finally return array. 我想将此列表转换为数组,然后最终返回数组。 How do I achieve that? 我该如何实现?

Or is there other way around to get the same result without using list? 还是有其他方法可以在不使用列表的情况下获得相同的结果?

Here's a more concise equivalent of your code that runs faster and with considerably less memory: 这是您的代码更简洁的等效代码,它可以更快地运行并且占用更少的内存:

[WebMethod]
public static Student[] GetStudents()
{        
    String connectionString = ConfigurationManager.ConnectionStrings["str"].ConnectionString;
    using(SqlConnection con = new SqlConnection(connectionString))
    using(SqlCommand cmd = con.CreateCommand())
    {
        cmd.CommandText = "SELECT * FROM [student]";
        con.Open();

        List<Student> ret = new List<Student>();

        using(SqlDataReader rdr = cmd.ExecuteReader())
        {
            while(rdr.Read())
            {
                ret.Add( new Student() {
                    Name = rdr.GetString("Name"),
                    Address = rdr.GetString("Address"),
                    Sex = rdr.GetString("Sex"),
                    Email = rdr.GetString("Email")
                } );
            }//while
        }//using

        return ret.ToArray();
    }//using 
}//GetStudents

You can use Linq, that way will be faster 您可以使用Linq,那样会更快

[WebMethod]
public static IEnumerable<student> getStd()
{
            string mystr = ConfigurationManager.ConnectionStrings["str"].ConnectionString;
            SqlConnection con = new SqlConnection(mystr);
            SqlCommand cmd = new SqlCommand("select * from student");
            con.Open();
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            da.Fill(ds);
            DataTable dt = ds.Tables[0];
            var array =dt.AsEnumerable().Select(item =>
                new student
                {
                    name = item["name"].ToString(),
                    address = item["address"].ToString(),
                    sex = item["sex"].ToString(),
                    email = item["email"].ToString()
                }).ToArray();
            return array;
}

Also you can return a List 您也可以返回列表

 [WebMethod]
 public static List<student> getStd()
 {
            string mystr = ConfigurationManager.ConnectionStrings["str"].ConnectionString;
            SqlConnection con = new SqlConnection(mystr);
            SqlCommand cmd = new SqlCommand("select * from student");
            con.Open();
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            da.Fill(ds);
            DataTable dt = ds.Tables[0];
            var array = dt.AsEnumerable().Select(item =>
                new student
                {
                    name = item["name"].ToString(),
                    address = item["address"].ToString(),
                    sex = item["sex"].ToString(),
                    email = item["email"].ToString()
                }).ToList();
            return array;
    }  

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM