2013-12-04 6 views
0

У меня есть сценарий, который я получаю правильно. Но мне нужно искать его в этом результате. Вот мой код.NullReferenceException using where where

if(productSearch.Keyword !=null || productSearch.Code!=null) 
{ 
    var key = productSearch.Keyword; 
    var cod = productSearch.Code; 

    if (productSearch.Code != null) 
    { 
     var Selected_Result = result.Results.Where(s => s.Code.ToLower().Contains(cod.ToLower())).ToList();      
     result.Results = Selected_Result; 
    } 
    else 
    { 
     var Selected_Result = result.Results.Where(s => s.Keyword.ToLower().Contains(key.ToLower())).ToList();       
     result.Results = Selected_Result; 
    } 
} 

Но это дает следующее исключение:

Object reference not set to an instance of an object на result.Results.Where(s => s.Code.ToLower().Contains(cod.ToLower())).ToList();

Я знаю s => s.Code.ToLower() приходит NULL, но я не знаю, почему, result имеет записей. Спасибо заранее.

+0

's.Code' является' null' в этом случае. – Matten

+0

Похоже, что один из элементов в результатах имеет 'Код' равный' null' –

+0

Да S.code имеет значение null, но как его получить. – EHS

ответ

3

Если в запросе null, то вероятность того, что это null в БД. Чтобы быть в безопасности, вы можете использовать оператор null coalescing, чтобы убедиться, что у вас есть как минимум что-то для звонка ToLower напр.

result.Results.Where(s => (s.Code ?? "").ToLower().Contains(cod.ToLower())) 
       .ToList(); 
+0

в моем случае, это не может быть null. И Ключевое слово, и код. – EHS

+3

Это «строка», это, безусловно, может быть. Если вы имеете в виду, что на стороне БД нет значения NULL, тогда, возможно, что-то не так с вашим сопоставлением. – James

+1

Джеймс, разве вы не использовали бы «String.Empty»? – Florian