0

我需要从数据库中查询一个有 400 行和 24 列的表。我需要查询这个表,以便在每一行,然后在每一行的每一列上,我可以执行一些 C# 代码(我可以使用列信息来执行一些代码)。

现在,我正在使用 select 语句一次又一次地从表中查询每一行并将其存储到自定义列表并对其执行自定义操作。

这是最好和最快的方法吗?还是我应该一次查询整个表并存储在某个地方?不确定数据集中的哪个位置,然后运行 ​​throw custom code 以使用每行中的信息进行一些操作?

4

6 回答 6

2

您可以从数据库中获取表一次并将其存储在数据表中,然后只需使用 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() 
                  };
于 2013-07-08T10:33:12.713 回答
2

假设每个字段为 1000 字节,则保存 400 行的总内存为 9.6MB。花生!只需读取 DataTable 中的整个表并根据需要进行处理。

于 2013-07-08T10:40:21.673 回答
1
  • 从数据库表中选择您关心的所有记录
  • 将选择的记录复制到 DataTable 中。

伪代码:

--dt is datatable
foreach(datarow dr in dt.rows)
{
--perform operation
string str=dr["columnname"].tostring 
}
于 2013-07-08T10:33:01.607 回答
0

400 行并不是一个庞大的数量,但它取决于每列中的数据以及您可能运行查询的频率。如果您要做的只是运行查询并操作输出,请改用 DataReader。

于 2013-07-08T10:34:58.987 回答
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();   
 }
于 2013-07-08T10:36:31.963 回答
0

如果记录数总是低于千,只需查询所有记录并将其保存在 List 中。

一旦数据在列表中,您可以使用 LINQ 查询列表 n 次,而无需针对每个请求访问数据库。

于 2013-07-08T10:49:21.430 回答