2010-04-15 2 views
3

У меня есть запрос структуры сущности следующим образом;Есть ли функция, аналогичная Math.Max ​​для Entity Framework?

From T In Db.MyTable 
Where (T.Col1 - T.Col2) + T.Col3 - T.Col4 > 0 _ 
Select T 

мне теперь нужно, чтобы убедиться, что в квадратные скобки часть «(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 

Есть ли простой способ сделать это? Я использую EF 2.0 (не последнюю, только что выпущенную версию).

Заранее спасибо

ответ

2

Max isn't supported, but Abs is; это будет? В противном случае вам придется использовать тройное выражение. В C#, я хотел бы сделать:

from t in Db.MyTable 
let m = t.Col1 >= t.Col2 ? t.Col1 - t.Col2 : 0 
where m + t.Col3 - t.Col4 > 0 

Однако, это будет неэффективно на уровне БД, если у вас индекс экспрессии. Поэтому я бы предложил вычисляемый столбец.

+1

Я вернулся к возврату объектов базы данных в память и вместо этого использовал Math.Max ​​в коллекции объектов. Ваш ответ тоже работает, поэтому спасибо. –

Смежные вопросы