我使用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来获取计数,但是如果有更快的方法来计算,那就太棒了
请尽可能帮助我
感谢您的耐心
答案 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