我正在C#项目中编写LINQ查询,如下所示,但编译器不喜欢计算字段'Enabled'。
它表示(a.Qtty * a.Price)与子查询之间的比较无法完成,因为类型不同。第一个是双,第二个是匿名类型。
我尝试了各种各样的演员,但没有让它发挥作用。
我删除了where子句以使其更简单,而optionTypes是枚举。
如果我删除计算值和子查询之间的比较,它可以正常工作。
任何帮助?
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();
答案 0 :(得分: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()