LINQ to Entities 无法识别方法“Single Abs(Single)”方法

本文关键字:Single 方法 Abs to 识别 LINQ Entities | 更新日期: 2023-09-27 18:32:55

我们希望 LINQ to Entities 能够处理绝对值函数。 似乎无法将 linq 转换为 sql。 我们使用的是 .net 3.5。 是否有其他方法可以表达此查询以与 Linq to Entities 配合使用? 我们使用的绝对值是实体/数据库表的一部分。 请参阅下面的代码示例。

ListItemIds = sessionDB.ListItems
.Where(x => x.ListItemId >= x.List.StartId && x.ListItemId <= x.List.EndId)
.Where(x => (x.Dr != null)||(Math.Abs(x.Dr.Value) >= rangeDB))
.Select(x => x.ListItemId).ToList();

LINQ to Entities 无法识别方法“Single Abs(Single)”方法

在数学术语中,如果x >= y-x >= y(相当于x <= -y(,则|x| >= y为真,因此您可以只检查Dr.Value的正值和负值。

然而,Scott是对的;你检查null的方式也是错误的。如果您只需要 Dr 属性为 null Dr.Value在提供范围内的记录(即排除 null(,请使用此选项:

ListItemIds = sessionDB.ListItems
  .Where(x => x.ListItemId >= x.List.StartId && x.ListItemId <= x.List.EndId)
  .Where(x => (x.Dr != null)&&((x.Dr.Value >= rangeDB)||(x.Dr.Value <= -rangeDB)))
  .Select(x => x.ListItemId).ToList();

或者对于DrDr.Value在提供范围内(即包括空(的记录:

ListItemIds = sessionDB.ListItems
  .Where(x => x.ListItemId >= x.List.StartId && x.ListItemId <= x.List.EndId)
  .Where(x => (x.Dr == null)||(x.Dr.Value >= rangeDB)||(x.Dr.Value <= -rangeDB))
  .Select(x => x.ListItemId).ToList();