我有一个班级MedicineData
Public Class MedicineDataDB
Public Sub New(ByVal dtr As DataRow)
Id = Int32.Parse(dtr("Id"))
MedicineName = dtr("medicineName").ToString()
BookName = dtr("book").ToString()
AuthorName = dtr("author").ToString()
MedicineData = dtr("newData").ToString()
End Sub
Dim _bookName As String
Dim _authorName As String
Dim _medicineDataID As Integer
Dim _medicineName As String
Dim _medicineData As String
Public Property Id() As Integer
Get
Return _medicineDataID
End Get
Set(ByVal value As Integer)
_medicineDataID = value
End Set
End Property
Public Property MedicineName() As String
Get
Return _medicineName
End Get
Set(ByVal value As String)
_medicineName = value
End Set
End Property
Public Property BookName() As String
Get
Return _bookName
End Get
Set(ByVal value As String)
_bookName = value
End Set
End Property
Public Property AuthorName() As String
Get
Return _AuthorName
End Get
Set(ByVal value As String)
_AuthorName = value
End Set
End Property
Public Property MedicineData() As String
Get
Return _medicineData
End Get
Set(ByVal value As String)
_medicineData = value
End Set
End Property
End Class
和
列表Dim medicineDataList As New List(Of MedicineDataDB)()
我需要检查列表中属性MedicineData
中特定单词的重复。
有没有办法用linq实现这个
使用vb.net?
答案 0 :(得分:1)
LINQ确实提供了允许您这样做的扩展方法。例如,您可以使用Where
方法将列表过滤到仅匹配的项目,然后您可以使用Count
方法获取它们的数量:
Dim count As Integer = medicineDataList.Where(Function(x) x.MedicineData = "Some Value").Count
从技术上讲,LINQ的Count
扩展方法可以让你给它一个谓词,但是,你真的不需要调用Where
,因为List
实现自己的Count
属性,隐藏扩展方法。因此,要使用单Count
方法执行此操作,您必须首先将其转换为IEnumerable(Of T)
,如下所示:
Dim count As Integer = DirectCast(medicineDataList, MedicineDataDB).Count(Function(x) x.MedicineData = "Some Value")
但实际上拨打Where
实际上更容易。
答案 1 :(得分:0)
如果你想计算每个项目的属性MedecineData中的某些文本的重复,你可以做
Dim countByIds = From m In medicineDataList
Select m.Id, Count = SomeMethodWhichCalculateYourCount(m.MedecineData)
通过这种方式,您将获得一个匿名类型的IEnumerable,该类型将具有以下属性:Id(源项目的ID)和符合您标准的Count。
SomeMethodWhichCalculateYourCount方法可以像直接调用Length
属性一样简单(所以在没有实际方法的情况下在查询中内联)或者与你一起使用的自定义方法
然后,如果您想要整体计数,可以修改此查询或使用第一个查询构建另一个查询:
Dim overallCount = Aggregate c In countByIds Into Sum(c.Count)