【问题标题】:C# LINQ Query with Calculated Field and Subquery in a Select Clause在 Select 子句中使用计算字段和子查询的 C# LINQ 查询
【发布时间】:2017-12-12 20:30:23
【问题描述】:

我正在我的 C# 项目中编写如下所示的 LINQ 查询,但编译器不喜欢计算字段“已启用”。

它说(a.Qtty * a.Price)和子查询之间的比较无法进行,因为类型不同。第一个是double,第二个是匿名类型。

我尝试了各种类型的演员,但都没有成功。

我删除了 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();

【问题讨论】:

  • 可能显示a的定义。
  • 对不起?我不明白你的问题..
  • 您将new { b.Qtty } 与数值进行比较。只需选择 b.Qtty 而不将其包装成匿名类型。
  • @GertArnold 请将此作为答案发布
  • 是的。效果很好!作为答案发布!

标签: c# mysql linq subquery calculated-field


【解决方案1】:

您将数值(我猜是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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-01
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    • 2022-01-13
    • 2014-02-23
    相关资源
    最近更新 更多