【问题标题】:Linq Query, looping thru datatable, joining and get the indexLinq 查询,通过数据表循环,加入并获取索引
【发布时间】:2014-06-20 12:42:37
【问题描述】:

我有一个 linq 查询,其中我有两个数据表,我将它们连接在一起并使用 .foreachforeach 中的操作数据循环。在 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 


             });

【问题讨论】:

  • 与 LINQ 一样强大,该代码简直让我头疼!大声笑:)

标签: c# linq


【解决方案1】:

你可以试试这个:

 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 
                    });

【讨论】:

  • 他为什么需要 ToList() ?
  • 他需要ToList(),因为ForEach()List的一个方法。您不能在 linq 查询的结果上调用它,通常是 IEnumerable
  • 那么他应该,写自己的 ForEach public static IEnumerable ForEach(this IEnumerable source, Action action) 并在之后调用 ToList(),虽然它很漂亮在这种情况下几乎相同(可能有一些性能优势或连接 Linq 表达式并且仍然针对 IEnumrable。{ foreach (T element in source) { action(element); } return source; }
  • @eranotzap 我同意你的观点。这是一个选择。这取决于 OP,他将选择什么来解决他所说的问题。你的接近对我来说听起来很合理。但是我认为我帖子中的方法在实现上要简单一些。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-24
  • 2021-07-17
  • 2018-04-19
  • 1970-01-01
相关资源
最近更新 更多