我正在开展一个项目,我将从现有系统中逐步淘汰实体框架。
我得到了
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。 我哪里出错了?
答案 0 :(得分:2)
ExecuteScalar返回一个标量 - 就像一个整数值。它无法转换为列表。
如果您使用的是Ado.Net,则必须返回DataTable或DataReader才能获得结果。无法直接返回List。
答案 1 :(得分:0)
您的代码几乎没有问题。
答案 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;
}