C# Linq查询帮助,需要根据子查询的结果设置ID
我的链接查询当前看起来像:C# Linq查询帮助,需要根据子查询的结果设置ID,c#,linq,C#,Linq,我的链接查询当前看起来像: var products = ( from p in products where !p.parentID.HasValue select new ProductList { Name = p.Name, WarehouseID = p.WarehouseID, IsInStock = products.Any(p1 => p1 ... ) }
var products =
(
from p in products
where !p.parentID.HasValue
select new ProductList
{
Name = p.Name,
WarehouseID = p.WarehouseID,
IsInStock = products.Any(p1 => p1 ... )
}
).ToArray();
根据业务规则,我需要做的是:
如果IsInStock
设置为true
,我需要从p1.WarehouesID
为仓库ID
分配值
我怎样才能做到这一点?您可以使用let station:
var products =
(
from p in products
where !p.parentID.HasValue
let p1Id = products.Where(p1 => p1 ... ).Select(p1 => p1.WarehouseID).FirstOrDefault()
select new ProductList
{
Name = p.Name,
WarehouseID = p1Id == 0 ? p.WarehouseID : p1Id,
IsInStock = p1Id != 0
}
)
.ToArray();
不幸的是,这并不像您希望的那么简单。尽管如此,这里还是有一种方法(假设
WarehouseID
是int
):
作为解释,需要对int?
和int
进行强制转换,因为对预期int
的结果执行FirstOrDefault
将返回0
,而不是null
int?
。我在这里将其转换为int?
,以允许我们确定结果实际上是否为null
不要将.ToArray()
放在末尾。
然后只需添加条件:
if (IsInStock())
products = products.where(p => p.WarehouseID > 10);
else
products = products.where(p => p.WarehouseId < 10);
if(IsInStock())
产品=产品,其中(p=>p.WarehouseID>10);
其他的
产品=产品,其中(p=>p.WarehouseId<10);
完成所有操作后,只需添加return.ToArray()
,查询将使用ifs执行
明白了吗
if (IsInStock())
products = products.where(p => p.WarehouseID > 10);
else
products = products.where(p => p.WarehouseId < 10);