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