Соединение LINQ с SQL и условие If

#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 был опечаткой в моем сообщении, но не частью кода.