检查对象列表中的单词的重复

时间:2015-06-05 12:59:37

标签: vb.net linq

我有一个班级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?

2 个答案:

答案 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)

fiddle example