wizklaus Ответов: 1

Как мне перевести эту строку запроса в linq


string query = "select isnull(sum(amount),0) [amount] from Recharge.dbo.AirtimePromoTable";


у меня есть проект, полный необработанной строки запроса и строки подключения, и теперь мне было поручено создать entity framework для этого проекта.
Как проверить наличие ISNUll и sum с помощью LINQ to SQL

Что я уже пробовал:

Вот что я пробовал, но это не работает...

using (var Context = new RechargeEntities())
      {
        var Que = (from b in Context.AirtimePromoTables
                      .Select(b => b.Amount)
                      .DefaultIfEmpty(0)
                      .Sum().ToString());
      }

1 Ответов

Рейтинг:
4

Maciej Los

Это должно сработать:

using (var Context = new RechargeEntities())
      {
        var Que = Context.AirtimePromoTables
                      .Sum(b => b.Amount);
      }


[РЕДАКТИРОВАТЬ]
Вам не нужно проверять все ли в порядке amount является нулевым или нет. Вам даже не нужно преобразовывать нули в нули, чтобы суммировать их, потому что Перечислимый.Метод Суммы (IEnumerable(Nullable(Double))) (System.Linq)[^] принимает обнуляемые значения в качестве входного параметра.
Итак, используя:
.Sum(b => b.Amount!=null ? b.Amount : 0);

это излишне!

Проверить это:
double?[] amounts = {null, null};
var result = amounts.Sum(); //returns 0 (zero)

или
double?[] amounts1 = {null, 2.5, 1.5, 0.5, 0.25, 1.75, 3.0, null};
var result1 = amounts.Sum(); //returns 9.5


Удачи вам!


wizklaus

Спасибо Мацей за ваш ответ... Но он не проверяет, является ли значение NULL

Maciej Los

Что?
Метод суммирования принимает в качестве параметра значение nullable. Таким образом, вам не нужно преобразовывать null в ноль...
Проверить это:

double?[] amounts = {null, 2.5, 1.5, 0.5, 0.25, 1.75, 3.0, null};
var result = amounts.Sum();
//9.5

В случае значения null только, сумма будет возвращать ноль!

Karthik_Mahalingam

5

Maciej Los

Спасибо, Картик.

Wendelius

Найс, 5.

Maciej Los

Спасибо, Мика.