实体框架有类似Math.Max的功能吗?

Rya*_*ill 5 entity-framework

我有一个实体框架查询如下;

From T In Db.MyTable
Where (T.Col1 - T.Col2) + T.Col3 - T.Col4 > 0 _
Select T
Run Code Online (Sandbox Code Playgroud)

我现在需要确保括号内的部分“(T.Col1 - T.Col2)”不会低于零。

在 .Net 中,我将其编码如下(但显然 EF 不喜欢 Math.Max)。

From T In Db.MyTable
Where Math.Max(T.Col1 - T.Col2,0) + T.Col3 - T.Col4 > 0 _
Select T
Run Code Online (Sandbox Code Playgroud)

是否有捷径可寻?我使用的是 EF 2.0(不是最新的,刚刚发布的版本)。

提前致谢

Cra*_*ntz 2

Max不支持,但Abs支持;这样可以吗?否则你将不得不使用三元表达式。在 C# 中,我会这样做:

from t in Db.MyTable
let m = t.Col1 >= t.Col2 ? t.Col1 - t.Col2 : 0
where m + t.Col3 - t.Col4 > 0
Run Code Online (Sandbox Code Playgroud)

但是,除非您有表达式索引,否则这在数据库级别将效率低下。所以我建议改用计算列。

  • 我恢复将数据库实体带回内存并在对象集合上使用 Math.Max。你的回答也有效,所以谢谢。 (2认同)