Линк: Сумма Int - PullRequest
       15

Линк: Сумма Int

2 голосов
/ 12 октября 2009

Я получаю " Нулевое значение не может быть назначено члену с типом System.Int32, который является типом значения, не допускающим обнуление " При выполнении Sum () моего пустого оператора. ResultView работает нормально, но либо

var r = from v in DataContext.Visits
        join bs in DataContext.BaseContents on v.BaseContentID equals bs.Id
        where (bs.CreatedBy == userId) && (v.DateVisited.Year == workDate.Year) &&
        (v.DateVisited.Month == workDate.Month) && (v.DateVisited.Day == workDate.Day) &&
        (v.IsPreviewed == false) && (bs.ProfileProjectId != null)
        select v;

int? number = r.Sum( v => v.Counter);

либо

var r = from v in DataContext.Visits
        join bs in DataContext.BaseContents on v.BaseContentID equals bs.Id
        where (bs.CreatedBy == userId) && (v.DateVisited.Year == workDate.Year) &&
        (v.DateVisited.Month == workDate.Month) && (v.DateVisited.Day == workDate.Day) &&
        (v.IsPreviewed == false) && (bs.ProfileProjectId != null)
        select v.Counter;

int? number = r.Sum(v);

терпит неудачу с тем же исключением.

Ответы [ 3 ]

4 голосов
/ 12 октября 2009

Попробуйте это ( обновлено ):

int number = r.Sum(v => (int?)v.Counter) ?? 0;
1 голос
/ 12 октября 2009

Не могли бы вы включить некоторые образцы данных? По крайней мере, вы можете взять r.ToList () и посмотреть значения вручную. Из того, что я вижу, похоже, все должно работать нормально. Также убедитесь, что v.BaseContentID, bs.Id и v.DateVisited не обнуляются. (особенно столбцы идентификаторов). Любые обнуляемые целые числа, на которые есть ссылки, могут вызвать это исключение. Не только те, что указаны в предложении Select

var r = from v in DataContext.Visits
        join bs in DataContext.BaseContents on v.BaseContentID equals bs.Id
        where (bs.CreatedBy == userId) 
            && (v.DateVisited.Date == workDate.Date)
            && (!v.IsPreviewed) 
            && (bs.ProfileProjectId.HasValue)
        select v;

int? number = r.Sum(v => v.Counter);
0 голосов
/ 12 октября 2009

Похоже, что установка && (v.Counter != null) отфильтровывает все нули для этого значения перед запуском суммы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...