我的链接查询目前看起来像是:
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
,我需要从WarehouseID
分配p1.WarehouesID
的值。
我该怎么做?
答案 0 :(得分:1)
您可以使用let statment:
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();
答案 1 :(得分:1)
不幸的是,这并不像你想的那么简单。尽管如此,这是一种方法(假设WarehouseID
是int
):
var products =
(
from p in products
where !p.parentID.HasValue
select new ProductList
{
Name = p.Name,
WarehouseID = (int)(products.Where(p1 => p1 ... ).Select(p1 => (int?)p1.WharehouseID).FirstOrDefault() ?? p.WarehouseID),
IsInStock = products.Any(p1 => p1 ... )
}
)
.ToArray();
作为解释,需要int?
和int
的强制转型,因为预期FirstOrDefault
的结果的int
会返回0
,而不是一个null
int?
。我已将其转换为int?
,以便我们确定结果是否为null
。
答案 2 :(得分:0)
不要将.ToArray()
放在最后。
然后只需添加条件:
if (IsInStock())
products = products.where(p => p.WarehouseID > 10);
else
products = products.where(p => p.WarehouseId < 10);
完成所有操作后,只需添加return .ToArray()
,然后使用ifs执行查询。
明白了吗?