在数据表中插入记录

本文关键字:记录 插入 数据表 | 更新日期: 2023-09-27 17:52:42

我在DataTable中有大约10万条记录,列EdgeId的默认值为0

我使用以下linq查询在此表中插入值

foreach (IEdge ed in edCol)
{
    var row  = from r in dtRow.AsEnumerable()  
               where (((r.Field<string>("F1") == ed.Vertex1.Name) && 
                       (r.Field<string>("F2") == ed.Vertex2.Name)) || 
                      ((r.Field<string>("F1") ==ed.Vertex2.Name) &&
                       (r.Field<string>("F2") == ed.Vertex1.Name)))
               select r;
    foreach (DataRow rows in row)
    {
        row["EgdeId"]=ed.Id;
    }
}

内部foreach loop占用大部分时间来执行。

有没有更好的方法来插入DataTable中的记录,而不使用这个foreach loop为每个DataRow ?

在数据表中插入记录

看起来您正在为edCol中的每个项迭代drow。如果drow中的项目数量很大,而匹配项目的数量相对较少,则可以预处理drow以从(ed.Vertex1)构建一个有效的映射。Name, ed.Vertext2.Name)作为行列表。例如Dictionary<string,string>, List>

var query = from r in dtRow.AsEnumerable()
            from ed in edCol
            let f1 = r.Field<string>("F1")
            let f2 = r.Field<string>("F2")
            let v1 = ed.Vertex1.Name
            let v2 = ed.Vertex2.Name
            where (f1 == v1 && f2 == v2) || 
                  (f1 == v2 && f2 == v1)
            select new { Row = r, EdgeId = ed.Id };
foreach(var item in query)
   item.Row["EgdeId"] = item.EdgeId;