根据子集合从集合中获取元素
Get element from collection, depending on subcollection
这是我的 class 结构:
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)
中存储了一系列产品。我需要提取股票价值 > 0 的产品。我用以下代码得到了这个:
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 获得此信息?
提前致谢!
编辑
我忘了说我需要使用 class ProdSize
的属性:stock
和 size
试试这个:-
FinalList = (From p In ProductList Where p.totalStock > 0
AndAlso p.Size = "M" Select p).ToList()
编辑:
您提供的数据似乎与您提供的 类 不匹配,虽然我已经根据您的 类 使用了该示例数据并用 C# 编写了这个 (希望你能在VB中将Lambda
转换为Function(x)
):-
var FinalList = productList
.SelectMany(x => x.sizes,
(prodObj, Sizes) => new
{ prodObj.productRef, Sizes })
.Where(x => x.Sizes.size == "M" && x.Sizes.stock > 0)
.Select(x => new
{
ProductName = x.productRef,
Size = x.Sizes.size,
Stock = x.Sizes.stock
}).ToList();
检查此 Fiddle,获取我使用过的示例数据和查询。
这就是我相信你想要的:
Dim FinalList = (From p In ProductList
Where p.sizes.Any(Function(x) x.stock > 0 AndAlso x.size = "M")
Select p).ToList()
虽然 "M" 是硬编码的,但我相信您可以想办法在其他地方删除它。
让我知道这是否有效。
结果:
这是我的 class 结构:
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)
中存储了一系列产品。我需要提取股票价值 > 0 的产品。我用以下代码得到了这个:
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 获得此信息? 提前致谢!
编辑
我忘了说我需要使用 class ProdSize
的属性:stock
和 size
试试这个:-
FinalList = (From p In ProductList Where p.totalStock > 0
AndAlso p.Size = "M" Select p).ToList()
编辑:
您提供的数据似乎与您提供的 类 不匹配,虽然我已经根据您的 类 使用了该示例数据并用 C# 编写了这个 (希望你能在VB中将Lambda
转换为Function(x)
):-
var FinalList = productList
.SelectMany(x => x.sizes,
(prodObj, Sizes) => new
{ prodObj.productRef, Sizes })
.Where(x => x.Sizes.size == "M" && x.Sizes.stock > 0)
.Select(x => new
{
ProductName = x.productRef,
Size = x.Sizes.size,
Stock = x.Sizes.stock
}).ToList();
检查此 Fiddle,获取我使用过的示例数据和查询。
这就是我相信你想要的:
Dim FinalList = (From p In ProductList
Where p.sizes.Any(Function(x) x.stock > 0 AndAlso x.size = "M")
Select p).ToList()
虽然 "M" 是硬编码的,但我相信您可以想办法在其他地方删除它。
让我知道这是否有效。
结果: