有没有什么办法可以优化这个反复调用存储过程的foreach循环

时间:2014-07-02 14:20:54

标签: c#

    private void LoadProducts(ProductLineInfo prodLine)
    {

        DataTable products = prodLine.GetProducts(_line_id);
        DataTable emisivities = prodLine.GetEmisivityData(_line_id);
        DataTable glass = prodLine.GetGlassData(_line_id);
        DataTable gapFill = prodLine.GetGapFillData(_line_id);
        DataTable doordata = prodLine.GetDoorData(_line_id);
        DataTable specialtyData = prodLine.GetSpecialtyData(_line_id);
        DataRow[] emisivity;
        DataRow[] glassdata;
        DataRow[] door;
        DataRow[] specialty;
        DataRow[] gapFills;


        if (products.Rows.Count > 0)
        {
            foreach (DataRow product in products.Rows)
            {
                emisivity = emisivities.Select("prod_id =" + product["prod_id"].ToString());
                glassdata = glass.Select("prod_id =" + product["prod_id"].ToString());
                door = doordata.Select("prod_id =" + product["prod_id"].ToString());
                specialty = specialtyData.Select("prod_id =" + product["prod_id"].ToString());
                gapFills = gapFill.Select("prod_id = " + product["prod_id"].ToString());
                _all_products.Add(new Product(product, _cpd_nbr, emisivity, glassdata, gapFills, door, specialty, _expansion_type));
            }
        }

    }

所以基本上这个代码在从不同的存储过程中检索每个项目之后将项目添加到列表中。只需说这项任务既昂贵又耗时。

有人会就如何优化此方法提出建议吗?

1 个答案:

答案 0 :(得分:0)

在检索数据之前加入数据库中的表。您可以在第一个存储过程中执行此操作。

SELECT table_one.myID, table_one.Field1, table_two.Field1 FROM table_one
JOIN table_two ON table_one.myID = table_two.myID

如果您无法编辑存储过程,则可以尝试使用视图...但是如果您需要使用存储过程,则仍需要将视图合并到存储过程中,这样就会失败。如果你可以直接点击数据库并使用视图,那么没问题。您可以使用实体框架来访问视图,或使用lambda表达式连接结果。如果您不熟悉实体框架,那么Google可能会对您有所帮助并找到一些教程。