从集合中获取元素,具体取决于子集合

时间:2015-01-07 12:54:22

标签: vb.net linq list collections

这是我的班级结构:

Public Class Product
    Dim productRef As string 
    Dim totalStock As Integer
    Dim sizes As List(of ProdSize)
End Class
Public Class ProdSize
    Dim stock As Integer
    Dim size As String
End Class

我选择了存储在List (of ProdSize)中的产品。我需要提取股票价值>的产品。我用以下代码得到了这个:

FinalList = (From p In ProductList Where p.totalStock > 0 Select p).toList()

但现在需求已经改变,我需要获得具有特定大小和库存的ProdSize的产品> 0

例如:

Prod A, Size M, Stock 1
Prod A, Size S, Stock 0
Prod B, Size M, Stock 0
Prod B, Size S, Stock 1
Prod C, Size M, Stock 1
Prod C, Size S, Stock 1

当我查找尺寸'M'时,我希望在我的列表FinalList中获得产品A和C.

有没有办法用一个LINQ获得这个? 提前谢谢!

修改

我忘了提及我需要使用班级ProdSize的属性:stocksize

2 个答案:

答案 0 :(得分:1)

试试这个: -

FinalList = (From p In ProductList Where p.totalStock > 0 
                        AndAlso p.Size = "M" Select p).ToList()

修改

您提供的数据似乎与您提供的类的数据不匹配,虽然我已根据您的类使用了该示例数据并在C#中写了这些数据(希望您可以转换{{1} }到VB中的Lambda: -

Function(x)

检查此Fiddle,了解样本数据&查询我用过。

答案 1 :(得分:0)

以下是我相信你的意思:

Dim FinalList = (From p In ProductList
                 Where p.sizes.Any(Function(x) x.stock > 0 AndAlso x.size = "M")
                 Select p).ToList()

虽然" M"是硬编码的,我相信你可以想办法在其他地方删除它。

让我知道这是否有效。

结果:

enter image description here