0

既存のシステムからエンティティ フレームワークを段階的に廃止するプロジェクトに取り組んでいます。

私は得た

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

しかし、この状況では the.ToList が認識されないようです。私はどこで間違ったのですか?

4

4 に答える 4

2

ExecuteScalar は、整数値のようなスカラーを返します。リストに変換できません。

Ado.Net を使用している場合は、結果を取得するために DataTable または DataReader を返す必要があります。リストを直接返す方法はありません。

于 2013-09-19T04:58:12.850 に答える
0

あなたのコードにはいくつかの問題があります。

  1. ExecuteScalar は、TGH によって指摘された単一の値を返します。
  2. 基本的に、ある種の配列または IEnumerable がある場合は ToList を使用します。あなたの場合、それは単一の int 値であるため、ここでは適用できません。
  3. ここで ExecuteReader を使用して、目標を達成できます。
于 2013-09-19T05:05:57.827 に答える
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);
                }

            }
        }
于 2013-09-19T05:09:08.970 に答える
0

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;
    }
于 2013-09-19T05:09:20.590 に答える