列表需要时间从数据库插入数据

时间:2015-08-10 11:21:18

标签: asp.net linq-to-sql

我有类列表,哪个类有3个这样的属性。

public string attributeName { get; set; }
public string strFormId { get; set; }
public string strValue { get; set; }

我正在通过像这样的列表

将数据库数据添加到其中
List<myAttributeData> attributesData = new List<myAttributeData>();
var result = db.ExecuteQuery<myAttributeData>(query, new object[0]);

// attributesData.Clear();
foreach (myAttributeData item in result.ToList())
{
    if (item.attributeName == "Province ")
    {
        var Loc = from d in db.tblLocations 
                  where d.LocationId == Convert.ToInt32(item.strValue)
                  select new
                  {
                       d.LocationName
                  };
        foreach (var item1 in Loc.ToList())
        {
            attributesData.Add(new myAttributeData()
            {
                attributeName = item.attributeName,
                strFormId = item.strFormId,
                strValue = item1.LocationName
            });
         }
     }

问题是它花了这么多时间现在我有70万条记录进入我的数据库表,这需要超过半小时的任何关于这种情况的建议谢谢。我必须将我的数据添加到列表中,因为我需要它在需要时使用它可以让任何人给我解决方案来减少将数据添加到字符串中的时间。

1 个答案:

答案 0 :(得分:0)

一个词:缓存。

此代码的问题在于您要遍历70,000条记录,并且每条记录都要返回数据库,以便读取额外信息。

foreach (myAttributeData item in result.ToList())
{
    if (item.attributeName == "Province ")
    {
        var Loc = from d in db.tblLocations  
        where d.LocationId == Convert.ToInt32(item.strValue)

如果您可以缓存位置列表(在调用foreach循环之前)

,您会发现代码过得很快
List<Location> cachedLocations = db.tblLocations.ToList();

..然后从那里设置Loc变量:

var Loc = from d in cachedLocations  
where d.LocationId == Convert.ToInt32(item.strValue)

始终将回拨到数据库的次数尽可能低。

祝你好运!