Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在数据表中插入记录_C#_Linq_Foreach - Fatal编程技术网

C# 在数据表中插入记录

C# 在数据表中插入记录,c#,linq,foreach,C#,Linq,Foreach,我在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&

我在
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(在edCol中编辑边缘)
{
var row=来自dtRow.AsEnumerable()中的r
其中((r.Field(“F1”)==ed.Vertex1.Name)和
(r.Field(“F2”)==ed.Vertex2.Name))|
((r.Field(“F1”)==ed.Vertex2.Name)&&
(r.Field(“F2”)==ed.Vertex1.Name)))
选择r;
foreach(行中的数据行)
{
行[“EgdeId”]=ed.Id;
}
}
内部
foreach循环
需要执行大部分时间


是否有更好的方法在
DataTable
中插入记录,而不对每个
DataRow
使用此
foreach循环

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

var query=来自dtRow.AsEnumerable()中的r
来自ed在edCol
设f1=r.字段(“f1”)
设f2=r.字段(“f2”)
设v1=ed.Vertex1.Name
设v2=ed.Vertex2.Name
式中(f1==v1&&f2==v2)|
(f1==v2&&f2==v1)
选择新{Row=r,EdgeId=ed.Id};
foreach(查询中的var项)
item.Row[“EgdeId”]=item.EdgeId;

linq内部是一个foreach循环。什么是lakh Kumar?我们不会说印度语:)最重要的是,你至少需要试着理解。你的循环没有插入任何内容。它正在作出选择。多少时间?150万行是需要拉取的大量数据,如果这是几秒钟的话,这可能仅仅是您的网络速度。这几乎需要5-6分钟。这里有许多称为行的东西,它们似乎在内部for循环中交换。我怀疑ed是由外部for循环定义的,但它丢失了。
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;