【问题标题】:Get Records other than unique in a DataTable using asp.net C#使用asp.net C#在DataTable中获取非唯一记录
【发布时间】:2018-07-13 11:21:10
【问题描述】:

我想在两个不同的datatable 中存储唯一记录和非唯一记录。

我已经实现了在 datatable 中获取唯一记录的逻辑,但我对如何获取唯一记录以外的记录感到困惑。

下面是我试过的代码。

dtExcelRows = dtExcelRows
              .AsEnumerable()
              .GroupBy(r => new 
                            { 
                              Col1 = r.Field<String>("SAP-ID") 
                            })
              .Select(g =>
                        {
                          var rowss = g.First();
                          return rowss;
                        })
             .CopyToDataTable();
             dtExcelRows.AcceptChanges();

上面的代码给了我唯一记录。请建议我如何获取其他数据表中的其他记录。

【问题讨论】:

  • 那么,您希望在其他 DataTable 中保留剩余的重复条目吗?
  • @SelvaTS :是的,我希望在另一个数据表中重复条目...
  • 首先,重新分配dtExcelRows 意味着您丢弃了这些行。
  • @NetMage :那我能不能得到这些行??
  • 只有在你先得到它们的情况下。您的代码没有获取唯一记录,它获取每组记录的第一条记录,其中一些可能是唯一的,而另一些可能不是,那么您所说的其他记录是什么意思?不在查询中的记录?

标签: c# asp.net linq datatable


【解决方案1】:

我们可以通过Skip() 扩展来获取除唯一值之外的其余项目。试试下面的方法,

您正在从代码中的分组项中获取 First() 值。所以我们可以跳过第一个并获取剩余的项目。

var duplicateItems = dataTable
              .AsEnumerable()
              .GroupBy(r => new
              {
                  Col1 = r.Field<String>("SAP-ID")
              })
              .Select(g => g.Skip(1)).SelectMany(x => x).CopyToDataTable();

            duplicateItems.AcceptChanges();

C# Fiddle 这个。

【讨论】:

  • 你把它放在一个变量中,对吧?是否可以将其放入数据表中
  • 收到错误The source contains no DataRows.
  • @BNN 你检查过你的数据是否有重复条目吗?检查小提琴。它工作正常。也是DataTable的结果。
  • 是的,我有,因为我故意上传重复数据用于测试目的
  • @BNN 我已经尝试了一些其他数据,它对我来说工作正常。请检查您的GroupBy 表达式。
猜你喜欢
  • 2011-05-20
  • 1970-01-01
  • 1970-01-01
  • 2015-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多