【问题标题】:Can I use Math.Max() / Math.Min() within a LINQ query?我可以在 LINQ 查询中使用 Math.Max() / Math.Min() 吗?
【发布时间】:2023-04-08 00:08:01
【问题描述】:

我有一个 LINQ 查询,用于从 SQL 数据库中选择一些行。我数据库中的每一行都代表一个物理空间的足迹,我试图只选择包含给定点的行。给我问题的查询部分如下:

LinqMetaData meta = new LinqMetaData(da);

var captures = (from c in meta.Capture
                where

                (c.TLLat.HasValue && lat < Math.Max(Math.Max(c.BLLat.Value, c.BRLat.Value), Math.Max(c.TLLat.Value, c.TRLat.Value))) 
                &&
                (c.TLLat.HasValue && lat > Math.Min(Math.Min(c.BLLat.Value, c.BRLat.Value), Math.Min(c.TLLat.Value, c.TRLat.Value)))
                
                select c);

当我运行代码时,我得到了这个错误:

二进制表达式'(39.3237282094724

我假设这意味着我不能在 LINQ 查询中使用 Math.Max() / Math.Min()...这是正确的吗?

编辑:

我使用 LinqMetaData 进行查询,它来自 LLBLGen Pro c# 库。我认为 LINQ 的这种实现可能在其查询中不支持 Math.Max() / Math.Min()。

【问题讨论】:

  • 这一切都取决于底层提供者。您需要查看它的文档以找到它可以表达的适当方法。
  • @asawyer 我在我的问题中添加了一些额外的信息。但就您所说的而言,我认为问题可能出在我正在运行 LINQ 查询的库上。
  • @asawyer 随意张贴作为答案,我会给你信用——你是对的

标签: c# linq llblgenpro llblgen


【解决方案1】:

只需将 MaxMin 计算作为单独的变量移到查询之外。
这不仅会影响您的查询整体性能,还会消除您看到的错误,在这种情况下连接到提供程序无法翻译嵌套的 MaxMin 方法。

Here 是关于 LINQ to Entities 的一些已知问题的 Microsoft 文档。

另一种方法是将上述查询转换为纯SQL Procedure

【讨论】:

    猜你喜欢
    • 2016-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    相关资源
    最近更新 更多