使用数据集表中的linq获取不同的计数和名称

时间:2016-02-11 15:37:50

标签: vb.net linq

我使用VB.Net对LINQ相当新。我知道它在获取结果方面非常快。

我有一个带表的数据集,想要使用count

检索不同的值

数据由(大约50,000行csv)

表示

p1.pdf

e3.xls

d1.doc

p2.pdf

e2.xls

d2.doc

p1.pdf

e3.xls

d2.doc

d4.doc

希望有这样的

p1.pdf - 2
p2.pdf - 1

e3.xls - 2
e2.xls - 1

d2.doc - 2
d1.doc - 1
d4.doc - 1

我尝试过这样的事情

Dim Filtered = From row in ds.tables("AuditLog").AsEnumerables()
               Where (row.Field(Of String)("DocName") Like "*.pdf")

Dim dt as New Datatable
dt = Filtered.CopyToDataTable

这给出了所有pdf的列表,我可以使用dataview来获取计数,但是如果有更快的方法来计算,那就太棒了

请尽可能帮助我

感谢您的耐心

1 个答案:

答案 0 :(得分:2)

Try this

    Dim dt As DataTable
    Dim dr As DataRow
    Dim nameCoulumn As DataColumn

    dt = New DataTable("files")
    nameCoulumn = New DataColumn("Name", Type.GetType("System.String"))
    dt.Columns.Add(nameCoulumn)

    dr = dt.NewRow()
    dr("Name") = "p1.pdf"
    dt.Rows.Add(dr)

    dr = dt.NewRow()
    dr("Name") = "e3.xls"
    dt.Rows.Add(dr)

    dr = dt.NewRow()
    dr("Name") = "p2.pdf"
    dt.Rows.Add(dr)

    dr = dt.NewRow()
    dr("Name") = "p1.pdf"
    dt.Rows.Add(dr)

    Dim query = From row In dt.AsEnumerable()
                Group row By name = row.Field(Of String)("Name") Into g = Group
    Select New With {
        Key name,
        .Count = g.Count()
        }

    For Each row In query
        Console.WriteLine(String.Format("{0} - {1}", row.name, row.Count.ToString()))
    Next