C# LINQ sub-where
本文关键字:sub-where LINQ | 更新日期: 2023-09-27 18:05:39
我有一个对象
public class OrderItem
{
public string idProduct { get; set; }
public int quantity { get; set; }
public List<WarehouseItem> WarehouseInfo = new List<WarehouseItem>();
}
public class WarehouseItem
{
public string Name{ get; set; }
public string LocnCode{ get; set; }
}
和我需要选择的项目有WarehouseInfo。LocnCode == "A1"
当我使用像
这样的东西时,它不起作用var items = itemList.Where(x => x.WarehouseInfo.Where(y => y.LocnCode.Equals("A1")));
您的需求可以有三种解释方式之一,所以这里有三种解决方案:
-
给我所有
OrderItems
,其中任何WarehouseItem
的LocnCode
为"A1"
:var items = itemList.Where(i => i.WarehouseInfo.Any(w => w.LocnCode == "A1"));
-
给我
OrderItem
s中LocnCode
大于"A1"
的所有WarehouseItem
s:var items = itemList.SelectMany(i => i.WarehouseInfo) .Where(w => w.LocnCode.Equals("A1"));
- 给我所有
OrderItems
,其中任何WarehouseItem
具有LocnCode
的"A1"
,并将WarehouseInfo
过滤为仅那些WarehouseItem
s:
var items = itemList.Where(i => i.WarehouseInfo.Any(w => w.LocnCode == "A1"))
.Select(i => new OrderItem
{
idProduct = i.idProduct,
quantity = i.quantity,
WarehouseInfo = i.WarehouseInfo.Where(w => w.LocnCode.Equals("A1"));
.ToList()
}
);
Try
var items = itemList.Where(x => x.WarehouseInfo.Any(y => y.LocnCode.Equals("A1")));
Where
接受一个应该返回bool
的谓词。对于给定的谓词,如果集合中至少有一个项返回true,则Any
将返回true。