Я пишу 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();
Вы сравниваете числовое значение (я думаю, 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()