Исключение нулевой ссылки в LINQ to SQL DataContext - PullRequest
0 голосов
/ 21 августа 2009

У меня есть исключение нулевой ссылки, вызванное этим кодом:

var recentOrderers = (from p in db.CMS
            where p.ODR_DATE > DateTime.Today - new TimeSpan(60, 0, 0, 0)
            select p.SOLDNUM).Distinct();
result = (from p in db.CMS
             where p.ORDER_ST2 == "SH" &&
                   p.ODR_DATE > DateTime.Today - new TimeSpan(365, 0, 0, 0) &&
                   p.ODR_DATE < DateTime.Today - new TimeSpan(60, 0, 0, 0) &&
                   !(recentOrderers.Contains(p.SOLDNUM))/**/
             select p.SOLDNUM).Distinct().Count();

результат двойного типа. Когда я комментирую:

!(recentOrderers.Contains(p.SOLDNUM))

Код работает нормально. Я проверил, что RecentOrderers не является нулевым, и когда я запускаю:

if(recentOrderes.Contains(0)) return;

Выполнение следует по этому пути и возвращает. Не уверен, что происходит, так как я использую подобный код выше:

var m = (from p in db.CMS where p.ORDER_ST2 == "SH" select p.SOLDNUM).Distinct();
            double result = (from p in db.CUST
                        join r in db.DEMGRAPH on p.CUSTNUM equals r.CUSTNUM
                        where p.CTYPE3 == "cmh" && !(m.Contains(p.CUSTNUM)) &&
                              r.ColNEWMEMBERDAT.Value.Year > 1900
                        select p.CUSTNUM).Distinct().Count();

, который также работает без нареканий. Отметив сходство, кто-нибудь может помочь? Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 21 августа 2009

Попробуйте объяснить получение данных из первого запроса путем преобразования в объект списка (фактически: выполнение его с помощью .ToList ()), а затем используйте для сравнения.

var recentOrderers = (from p in db.CMS
            where p.ODR_DATE > DateTime.Today - new TimeSpan(60, 0, 0, 0)
            select p.SOLDNUM).Distinct().ToList();
0 голосов
/ 21 августа 2009

Я не очень знаком с Linq, но может ли это быть .Distinct () возвращает ноль, если нет подходящих результатов?

...