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

C# 将查询结果返回到列表c,c#,asp.net,list,C#,Asp.net,List,我正在从事一个项目,在这个项目中,我将从现有系统中逐步淘汰实体框架 我得到 为了绕过这个,我做了 public List<GSP> GetOwnAirline() { string get_ = "SELECT * FROM " + Adm.schema_ + "Adm.GSP WHERE Description = 'Own Airline'"; ccs = new SqlConnection(Adm.COnn

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

我得到

为了绕过这个,我做了

   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似乎不被认可。
伙计们,我哪里做错了?

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


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

您的代码几乎没有问题

ExecuteScalar返回TGH指出的单个值。 基本上,当您有某种数组或IEnumerable时,可以使用ToList。在您的例子中,它是一个单一的int值,所以不能在这里应用。 您可以在这里使用ExecuteReader来实现您的目标。 试试这个:

    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);
                }

            }
        }

Exucute scalar将返回标量。因此,您必须创建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;
    }

首先显示内容结果数据您从EF转换到老式ADO.Net的原因是什么?是的,系统显示性能问题。我的前辈要求制作一个没有EF的版本,这是一个试用版。@AnoushkaseeChour你在哪里使用这个GetOwnAirline方法?是否可以从此方法返回DataTable或DataSet?无法识别PropertyName!我已经给了虚拟财产。在类中使用您的属性更改它。
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;
    }