1

我们希望 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();
4

1 回答 1

3

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

然而,斯科特是对的。检查 null 的方式也是错误的。如果您只想要Dr属性不为 Dr.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();

或者对于Dr Dr.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();
于 2013-09-27T00:47:03.047 回答