我们希望 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();
在数学术语中,如果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();
或者对于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();