C# Linq查询,循环通过datatable,连接并获取索引
我有一个linq查询,其中有两个数据表,我将它们连接在一起,并使用C# Linq查询,循环通过datatable,连接并获取索引,c#,linq,C#,Linq,我有一个linq查询,其中有两个数据表,我将它们连接在一起,并使用.foreach和foreach中的操作数据进行循环。在foreach中循环通过时,如何获取行的行索引 我知道如何在不使用连接的情况下执行此操作,简单的方法是在linq语句之前放置一个int变量,并在foreach中递增。但我想知道是否可以在这个查询中添加。Select(Row,index)=>new{Row,index} Datatable1.AsEnumerable() .Join(Datatabl
.foreach
和foreach
中的操作数据进行循环。在foreach中循环通过时,如何获取行的行索引
我知道如何在不使用连接的情况下执行此操作,简单的方法是在linq语句之前放置一个int变量,并在foreach中递增。但我想知道是否可以在这个查询中添加。Select(Row,index)=>new{Row,index}
Datatable1.AsEnumerable()
.Join(Datatable2.AsEnumerable(),
dt1row => dt1row.Field<string>("name"),
dt2row => dt2row.Field<string>("name")) ,
(dt1row, dt2row) => new { dt1row, dt2row }).ToList()
.ForEach(o =>
{
//check if value for fields is the same in
});
Datatable1.AsEnumerable()
.Join(Datatable2.AsEnumerable(),
dt1row=>dt1row.Field(“名称”),
dt2row=>dt2row.Field(“名称”),
(dt1row,dt2row)=>new{dt1row,dt2row})
.ForEach(o=>
{
//检查字段的值在中是否相同
});
您可以试试这个:
Datatable1.AsEnumerable()
.Join(Datatable2.AsEnumerable(),
dt1row => dt1row.Field<string>("name"),
dt2row => dt2row.Field<string>("name")) ,
(dt1row, dt2row) => new { dt1row, dt2row })
.Select((row, index)=> new
{
Index=index,
Dt1row = row.dt1row,
Dt2row = row.dt2row
}).ToList()
.ForEach(o =>
{
//check if value for fields is the same in
});
Datatable1.AsEnumerable()
.Join(Datatable2.AsEnumerable(),
dt1row=>dt1row.Field(“名称”),
dt2row=>dt2row.Field(“名称”),
(dt1row,dt2row)=>new{dt1row,dt2row})
.选择((行,索引)=>新建
{
索引=索引,
Dt1row=行。Dt1row,
Dt2row=行。Dt2row
})托利斯先生()
.ForEach(o=>
{
//检查字段的值在中是否相同
});
尽管LINQ功能强大,但它的代码却让我大吃一惊!lol:)他为什么需要一个ToList()?他需要ToList()
,因为ForEach()
是List
的一种方法。您不能在linq查询的结果上调用它,该查询通常是IEnumerable
。然后,他应该编写自己的ForEach公共静态IEnumerable ForEach(此IEnumerable源代码,Action Action)并在之后调用ToList(),尽管在本例中情况基本相同(可能会有一些性能上的好处,或者连接Linq表达式并仍然使用IEnumerable.{foreach(源代码中的T元素){action(元素);}return source;}@eranotzap我同意你的观点,伙计。这是一个选择。他会选择什么作为他所说问题的解决方案取决于OP。我觉得你的方法听起来很合理。不过我认为我帖子中的方法在实现上要简单一点。