关于yield的使用解决方法
关于yield的使用
新手刚接触SQL,抛开SQL注入不说,这样的设计合理吗?FindAs方法返回的相当于一个游标,如果多次使用,就把它TOLIST加载到内存当中。。
如果数据量大的时候,而且我们只对list1使用1次的话,这样的设计会不会更合理?
------解决方案--------------------
用yield return特别要注意,你的conn.Close();可能始终调用不到。
public class Dbhelpercs
{
public IEnumerable<T> FindAs<T>(string sqlwhere = "") where T : new()
{
SqlConnection conn = new SqlConnection(@"Server=SHADOW-PC\SQLEXPRESS;Integrated Security=SSPI;database=test");
conn.Open();
SqlCommand comm = conn.CreateCommand();
comm.CommandText = "select * from " + typeof(T).Name + " " + sqlwhere;
SqlDataReader dataList = comm.ExecuteReader();
while (dataList.Read())
{
T t = new T();
var property = t.GetType().GetProperties();
foreach (var thisPro in property)
{
thisPro.SetValue(t, dataList[thisPro.Name], null);
}
yield return t;
}
conn.Close();
}
public void AA()
{
Dbhelpercs d = new Dbhelpercs();
var list1= d.FindAs<类型>();//单次使用
var list2=d.FindAs<类型>().ToList()//多次使用
}
}
新手刚接触SQL,抛开SQL注入不说,这样的设计合理吗?FindAs方法返回的相当于一个游标,如果多次使用,就把它TOLIST加载到内存当中。。
如果数据量大的时候,而且我们只对list1使用1次的话,这样的设计会不会更合理?
------解决方案--------------------
用yield return特别要注意,你的conn.Close();可能始终调用不到。