Запрос C # LINQ с вычисляемым полем и подзапросом в предложении Select

0

Я пишу LINQ-запрос в моем проекте С#, как показано ниже, но компилятор не любит вычисляемое поле "Enabled".

В нем говорится, что сравнение между (a.Qtty * a.Price) и подзапросом не может быть выполнено, потому что типы разные. Первый - двойной, а второй - анонимный.

Я пробовал всевозможные броски, но не получил его на работу.

Я удалил предложения where, чтобы упростить его, и optionsTypes - это перечисление.

Если я удалю сравнение между вычисленным значением и подзапросом, он отлично работает.

Любая помощь?

dynamic fromOthers = _ctx.Orders
  .Where( /* conditions */ )
  .Select(a => new
    {
      Id = a.Id,
      Option = a.OpType == OptionTypes.Buy ? "Buy" : "Sell",
      Enabled = 
        (a.OpType == OptionTypes.Buy 
          ? (a.Qtty * a.Price) <= 
            _ctx.Items
              .Where( /* conditions */ )
              .Select(b => new
              {
                    b.Qtty
              })
              .FirstOrDefault() ? "Yes" : "No"
          : "TBD"
        )
      })
    .ToList();
Теги:
linq
subquery
calculated-field

1 ответ

0

Вы сравниваете числовое значение (я думаю, decimal) с анонимным типом:

(a.Qtty * a.Price)
<= 
_ctx.Items.Where().Select(b => new { b.Qtty }).FirstOrDefault()

Чтобы исправить это, не создавайте анонимный тип, а просто выберите значение:

(a.Qtty * a.Price)
<= 
_ctx.Items.Where().Select(b => b.Qtty).FirstOrDefault()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню