0

我有一个 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 < Max(Max(EntityField(LPLA_1.BLLat AS BLLat), EntityField(LPLA_1.BRLat AS BRLat)), Max(EntityField(LPLA_1.TLLat AS TLLat), EntityField(LPLA_1.TRLat AS TRLat)) ))' 不能转换为谓词表达式。

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

编辑:

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

4

1 回答 1

0

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

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

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

于 2020-07-28T17:38:41.937 回答