[英]Help with Linq query, need to set ID based on results of a sub-query
我的鏈接查詢當前看起來像:
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
分配WarehouseID
的值。
我怎樣才能做到這一點?
您可以使用let語句:
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
):
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
是必需的,因為在期望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);
在所有事情之后,只需添加return .ToArray()
並使用ifs執行查詢。
明白了嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.