[英]Querying data from SQL
我需要从具有400行和24列的数据库中查询表。 我需要查询该表, 以便在行的每一行然后在每一列都可以执行一些C#代码( 我可以使用列信息来执行一些代码 )。
现在,我正在使用select语句从表中一次又一次地查询每一行,并将其存储到自定义列表并对其执行自定义操作。
这是最好,最快的方法吗? 或者我应该只查询整个表一次并存储在某个地方? 不确定在数据集中的哪个位置,然后运行throw自定义代码以使用每一行中的信息进行一些操作?
您可以一次从数据库中获取表并将其存储在数据表中,然后只需使用linq选择类似这样的列
var data = dt.AsEnumerable().Select(s => s.Field<string>("myColumnName")).ToArray<string>();
如果您不想在代码的任何地方使用其他列,则应仅从数据库中选择有用的列。
您还可以使用linq选择数据库的多个列。 这些值将以匿名类型的对象存储。
var mutipleData = from row
in dt.AsEnumerable()
select new
{ Value1 = row["Column1"].ToString(),
Value2 = row["Column2"].ToString()
};
假设每个字段为1000字节,则可容纳400行的总内存为9.6MB。 花生! 只需读取DataTable中的整个表并根据需要对其进行处理。
伪代码:
--dt is datatable
foreach(datarow dr in dt.rows)
{
--perform operation
string str=dr["columnname"].tostring
}
400行不是一个很大的数目,但是它取决于每一列中的数据以及运行查询的频率。 如果您要做的只是运行查询并处理输出,请改用DataReader。
如果只有400条记录,我将一次全部获取它们,将它们存储在一个类中并遍历每个实例。
就像是:
类
public class MyTableClass(){
string property1 {get; set;}
string property2 {get; set;}
int property3 {get; set;}
// etc.
}
逻辑:
ICollection<MyTableClass> lstMyTableClass = (
from m in db.mytableclass
select m
).ToList();
return lstMyTableClass;
然后循环:
foreach(var myTableInstance in lstMyTableClass){
myTableInstance.DoMyStuff();
}
如果记录数始终小于千,请查询所有记录并将其保存在列表中。
一旦数据进入列表,您就可以使用LINQ查询列表n次,而无需为每个请求访问数据库。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.