将查询结果返回到列表c#

时间:2013-09-19 04:56:27

标签: c# asp.net list

我正在开展一个项目,我将从现有系统中逐步淘汰实体框架。

我得到了

public List<GSP> GetOwnAirline()
        { 
            var res = from own in entity.GSP where own.Description == "Own Airline" select own;
            return res.ToList();
        }

绕过这个我做了

   public List<GSP> GetOwnAirline()
        {

            string get_ = "SELECT * FROM " + Adm.schema_ + "Adm.GSP WHERE Description = 'Own Airline'";
            ccs = new SqlConnection(Adm.COnnectionString);
            //convey transaction to db
            cmd = ccs.CreateCommand();
            ccs.Open();
            cmd.CommandText = get_;
            var res =cmd.ExecuteScalar();
            ccs.Close();

            return res.ToList();
        }

但在这种情况下,似乎无法识别.ToList。 我哪里出错了?

4 个答案:

答案 0 :(得分:2)

ExecuteScalar返回一个标量 - 就像一个整数值。它无法转换为列表。

如果您使用的是Ado.Net,则必须返回DataTable或DataReader才能获得结果。无法直接返回List。

答案 1 :(得分:0)

您的代码几乎没有问题。

  1. ExecuteScalar返回TGH指出的单个值。
  2. 基本上,当你有某种Array或IEnumerable时,你使用ToList。因为,在您的情况下,它是单个int值,因此,它不能在此处应用。
  3. 您可以在此处使用ExecuteReader来实现目标。

答案 2 :(得分:0)

试试这个:

    public List<GSP> GetOwnAirline()
    {
        List<GSP> lstGSP = new List<GSP>();
        using (ccs = new SqlConnection(Adm.COnnectionString))
        {
            string get_ = "SELECT * FROM " + Adm.schema_ + "Adm.GSP WHERE Description = 'Own Airline'";
            using (SqlCommand cmd = new SqlCommand(get_, ccs))
            {

                ccs.Open();
                SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                while (rdr.Read())
                {
                    GSP objGSP = new GSP();
                    Fill(objGSP, rdr);//method
                    lstGSP.Add(objGSP);
                }
                ccs.Close();
            }
        }

        return lstGSP;
    }



public static void Fill(object LogicObject, System.Data.SqlClient.SqlDataReader SqlDataReader)
        {
            Dictionary<string, PropertyInfo> props = new Dictionary<string, PropertyInfo>();
            foreach (PropertyInfo p in LogicObject.GetType().GetProperties())
                props.Add(p.Name, p);
            //foreach (System.Data.DataColumn col in Row.Table.Columns)

            for (int i = 0; i < SqlDataReader.FieldCount; i++)
            {
                string name = SqlDataReader.GetName(i);
                if (SqlDataReader[name] != DBNull.Value && props.ContainsKey(name))
                {
                    object item = SqlDataReader[name];
                    PropertyInfo p = props[name];
                    if (p.PropertyType.IsGenericType && p.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>))
                    {
                        if (p.PropertyType != SqlDataReader.GetFieldType(i))
                            item = Convert.ChangeType(item, p.PropertyType.GetGenericArguments()[0]);

                    }
                    else
                    {
                        if (p.PropertyType != SqlDataReader.GetFieldType(i))
                            item = Convert.ChangeType(item, p.PropertyType);
                    }

                    p.SetValue(LogicObject, item, null);
                }

            }
        }

答案 3 :(得分:0)

执行标量将返回标量。因此,您必须创建GSP类型的对象并添加到列表中。 另一种方法是

public List<GSP> GetOwnAirline()
    {

        string get_ = "SELECT * FROM " + Adm.schema_ + "Adm.GSP WHERE Description = 'Own Airline'";
        ccs = new SqlConnection(Adm.COnnectionString);
        //convey transaction to db
        cmd = ccs.CreateCommand();
        ccs.Open();
        cmd.CommandText = get_;
        var res =cmd.ExecuteScalar();
        ccs.Close();
        List<GSP> gsp = new List<GSP>();
        GSP temp = new GSP();
        temp.PropertyName = res;
        gsp.Add(temp);
        return gsp;
    }