首页 > 解决方案 > 如何从数据表中选择所有记录仅以一列不同

问题描述

我有一个这样的数据表

invoice_number  invoice_date    customer_name   item_name
    1           14/01/2019          Mr.A            Item1
    2           15/01/2019          Mr.B            Item1
    3           15/01/2019          Mr.C            Item2
    1           15/01/2019          Mr.A            Item2
    2           20/01/2019          Mr.B            Item5

看图

我想要的是

我想将除“item_name”之外的所有列插入到 ListView。我的标准是'invoice_number' 必须是唯一的。其他列中的数据类型无关紧要。它应该在 ListView 中看起来像这样。基本上,抓住第一次出现并忽略其余的。

invoice_number  invoice_date    customer_name   
    1           14/01/2019          Mr.A            
    2           15/01/2019          Mr.B            
    3           15/01/2019          Mr.C            

到目前为止我尝试过的

Dim temp = (From p In Invoice_printing.Tables("inv_for_print").AsEnumerable()
                        Select New With {.inv_number = p.Field(Of String)("invoice_number"),
                                            .inv_date = p.Field(Of Date)("invoice_date"),
                                            .ol_name = p.Field(Of String)("ol_name")}).ToList()

            Dim inv_selected_date = temp.GroupBy(Function(x) New With {Key x.inv_number, Key x.inv_date, Key x.ol_name}).ToList()


            For Each inv In inv_selected_date
                Dim newItem As New ListViewItem(inv.Key.inv_number)
                newItem.SubItems.Add(inv.Key.ol_name)
                newItem.SubItems.Add(CType(inv.Key.inv_date, String))
                lv_inv_list.Items.Add(newItem)

            Next

它有效,但由于重复日期,发票编号 1 和 2 在 ListView 中出现两次。我应该怎么办?我的 Linq 知识非常有限。除了将数据放入多维数组,运行嵌套循环并删除重复的条目之外,我想不出任何其他方法。

标签: vb.netlinq

解决方案


在您的问题下查看我的评论。如果我对您的理解正确,那么我认为这就是您想要的:

var inv_selected_date = temp.GroupBy(i => i.invoice_number).Select(iv => iv.First()).ToList();

推荐阅读