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;