在vb.net中使用数组值过滤通用列表

时间:2018-10-15 16:33:22

标签: .net vb.net

我有一组颜色名称和一个通用产品列表。我想过滤仅包含颜色名称与Sql Like运算符相同的数组中的产品的列表。例如'%Red%'。 我的代码正在

Public Class Item
        Public Property ItemID() As Integer
        Public Property ItemName() As String
        Public Property RetailPrice() As Double
        Public Property Colour() as String
End Class

Dim ColourNames() As String = {"Red", "Blue", "Black", "Green"}
Dim filteredList = (From i In listItems Where i.ItemName.Contains(ColourNames)).ToList

1 个答案:

答案 0 :(得分:0)

编辑:我已经更新了示例,以匹配您更新的问题

根据您的示例,您似乎希望将ListItems成为包含“产品”的通用集合。

采用原始的ListItems数组并添加where()方法以执行LINQ查询,并仅从ColourNames()数组中获取与该属性匹配的对象。

    Dim ColourNames() As String = {"Red", "Blue", "Black", "Green"}
    Dim FilteredList = ListItems.Where(Function(i) ColourNames.Contains(i.Colour)).ToList

Where()方法将仅返回您指定的条件为true的对象。它遍历ListItems并评估每个当前对象(在本示例中表示为i,因为那是您在问题中使用的,但是您可以使用任何变量名)以查看color属性是否包含在ColourNames数组中。

如果您需要contains方法不区分大小写,则只需向其添加StringComparer.InvariantCultureIgnoreCase重载。这将更好地反映您从SQL中的LIKE获得的功能。

Dim FilteredList = ListItems.Where(Function(i) ColourNames.Contains(i.Colour, StringComparer.InvariantCultureIgnoreCase)).ToList