我需要从数据库中查询一个包含400行和24列的表。我需要查询此表以便在每行上然后在行的每一列上我可以执行一些C#代码( 我可以使用列信息来执行某些代码 )。
现在,我正在使用select语句一次又一次地从表中查询每一行并存储到自定义列表并对其执行自定义操作。
这是最好和最快的方式吗?或者我应该只查询整个表并存储在某个地方?不确定数据集中的位置然后运行抛出自定义代码以使用每行中的信息执行某些操作?
答案 0 :(得分:2)
您可以从数据库中获取一次表并将其存储在datatable中,然后只需使用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()
};
答案 1 :(得分:2)
假设每个字段为1000个字节,保存400行的总内存为9.6MB。花生!只需在DataTable中读取整个表格并按照您的意愿处理它。
答案 2 :(得分:1)
伪代码:
--dt is datatable
foreach(datarow dr in dt.rows)
{
--perform operation
string str=dr["columnname"].tostring
}
答案 3 :(得分:0)
400行不是一个庞大的数量,但它取决于每列中的数据以及您可能运行查询的频率。如果要执行的只是运行查询并操作输出,请改用DataReader。
答案 4 :(得分:0)
如果它只有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();
}
答案 5 :(得分:0)
如果记录数总是低于thoussand,只需查询所有记录并将其保存在List中。
一旦数据在List中,您就可以使用LINQ查询List n次,而无需为每个请求访问数据库。