LINQ Count нулевые значения - PullRequest
1 голос
/ 04 марта 2020

Я делаю простую диаграмму P ie, которая подсчитывает текущего сотрудника, я все еще новичок в LINQ, поэтому я просто хочу спросить, есть ли способ подсчета нулевых значений?

Вот мой код на данный момент:

public ActionResult PieCount()
{    
    int undefined = db.EMPs.Where(x => x.JS_REF == 1).Count();
    int regular = db.EMPs.Where(x => x.JS_REF ==2 ).Count();
    int contractual = db.EMPs.Where(x => x.JS_REF == 3).Count();
    int probationary = db.EMPs.Where(x => x.JS_REF ==4 ).Count();
    int notdefined = db.EMPs.Where(x => x.JS_REF == null ).Count();

    Ratio obj = new Ratio();

    obj.Undefined = undefined;
    obj.Contractual = contractual;
    obj.Regular = regular;
    obj.Probationary = probationary;
    obj.Notdefined = notdefined;

    return Json(new { result = obj }, JsonRequestBehavior.AllowGet);
}

Пока это работает, но когда я попытался посчитать нулевое значение "x.JS_REF == null", я получаю сообщение об ошибке

вот ошибка: введите описание изображения здесь

Моя база данных: введите описание изображения здесь

1 Ответ

4 голосов
/ 04 марта 2020

Просто добавьте предикат к своему Count() выражению

int notdefined = db.EMPs.Count(x => x.JS_REF == 0);

или

int notdefined = db.EMPs.Count(x => String.IsNullOrEmpty(x.JS_REF.ToString()) == null);

Обратите внимание, что: int не может быть нулевым. Если для него не установлено значение, то я считаю, что значением по умолчанию является ноль. Поэтому вы должны проверить, что ваш тип JS_REF равен int или int?


Код рефакторинга

Вы должны получить все данные одновременно считай с них, а не звони несколько раз.

var data = db.EMPs.Where(x => 0 <= x.JS_REF && x.JS_REF <= 4).Select(p => p.JS_REF ).ToList();

int undefined = data.Count(x => x == 1);
int regular = ddata.Count(x => x == 2);
int contractual = data.Count(x => x == 3);
int probationary = data.Count(x => x == 4);
int notdefined = data.Count(x => x == 0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...