C#LINQ查询在选择子句中使用计算字段和子查询

时间:2017-12-12 20:30:24

标签: c# mysql linq subquery calculated-field

我正在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();

1 个答案:

答案 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()