#c# #linq #join #if-statement #conditional-statements
#c# #linq #Присоединиться #if-оператор #условные операторы
Вопрос:
У меня есть запрос ниже, где я хочу установить цену, если bstock не равен null и bstock.Цена (bstock.Цена — это значение, допускающее обнуление? ) не равно нулю. Соединение является левым внешним соединением. Кто-нибудь может мне помочь?
var bstocks = (from p in qry
join bstock in bstockRepository.Select() on p.StockCode equals bstock.StockCode
into J1
from bstock in J1.DefaultIfEmpty()
select new
{
p.StockCode,
p.Description,
p.ListPrice,
p.Price = bstock.Price != null ? bstock.Price : p.Price,
p.QuantityOnHand ,
p.Cube,
p.ShippingFormat,
p.Weight,
p.NextShipment,
p.NextShipment2,
p.NextShipmentQuantity,
p.NextShipment2Quantity,
Bstock = p.Bstock
}
).AsQueryable();
Ответ №1:
bstock
в вашем запросе может быть null, поскольку вы выполняете соединение по левому краю. Итак, вам нужно учитывать это:
Price = bstock != null amp;amp; bstock.Price != null ? bstock.Price : p.Price,
Результат:
var bstocks = (from p in qry
join bstock in bstockRepository.Select() on
p.StockCode equals bstock.StockCode into J1
from bstock in J1.DefaultIfEmpty()
select new
{
p.StockCode,
p.Description,
p.ListPrice,
Price = bstock != null amp;amp; bstock.Price != null ? bstock.Price : p.Price,
p.QuantityOnHand ,
p.Cube,
p.ShippingFormat,
p.Weight,
p.NextShipment,
p.NextShipment2,
p.NextShipmentQuantity,
p.NextShipment2Quantity,
Bstock = p.Bstock
});
Комментарии:
1. Алекс, я знаю, что это может быть ошибкой, но добавление этого условия выдает ошибку и не будет компилироваться. Так что это то, что я хочу сделать, но это не работает.
2. Вот ошибка: «Недопустимый аноним-член типа declarator. Участники анонимного типа должны быть объявлены с назначением участника, простым именем или доступом к участнику.»
3. @Shuaib — Можете ли вы попробовать удалить
Bstock = p.Bstock
в конце?4. @Shuaib — игнорируйте мой последний комментарий. Это не должно иметь значения.
5. СПАСИБО, Алекс!!! Я понял. Мне пришлось выполнить приведение к новому продукту. Вот код. выберите новый продукт{} Bstock=p.Bstock был опечаткой в моем сообщении, но не частью кода.