2015-04-23 3 views
-1

У меня есть datatable. Я получаю отличное значение столбца из кода ниже.Выберите отдельное значение с предложением where для данных datatable

AllFields является моим данным.

var distinctIds = AllFields.AsEnumerable() 
    .Select(s => new 
    { 
     id = s.Field<string>(ColumnName), 
    }) 
    .Distinct() 
    .ToList(); 

Однако я хочу получить отличное значение столбца, где условие на одном столбце. Я пробовал что-то ниже.

var distinctIds = AllFields.AsEnumerable() 
    .Select(s => new 
    { 
     id = s.Field<string>(ColumnName), 
    }) 
    .Distinct() 
    .Where(f => f.id.Contains(TxtStringSearchInput.Text)) 
    .ToList(); 

он показывает мне ниже ошибки во время выполнения.

nullreferenceexception ошибка. {«Ссылка на объект не установлена ​​в экземпляр объекта.»}

+0

Psychic отладки говорит, что один из ваших рядов имеет 'null' в нем и содержит не удается. Однако, без фактического сообщения об ошибке, мои психические навыки, как известно, отсутствуют. –

+0

@SteveMitcham, вероятно, правильно - проверьте связанный вопрос для _lots_ информации об этой ошибке и о том, как отслеживать, где она находится. –

ответ

3

Как вы получаете NRE. Похоже, что один из стоимости приходят null так что вы должны проверять для нуля а в Where():

var distinctIds = AllFields.AsEnumerable() 
.Select(s => new 
{ 
    id = s.Field<string>(ColumnName), 
}) 
.Distinct() 
.Where(f => f.id !=null && f.id.Contains(TxtStringSearchInput.Text)) 
.ToList(); 
3

Поскольку вы получаете нулевое ссылочное исключение на втором вызове, и разница лишь в том что вы вызываете Contains в поле id, скорее всего, поле id равно null для одного из ваших сравнений.

Try проверки null перед вызовом Contains, например:

var distinctIds = AllFields 
    .AsEnumerable() 
    .Select(s => new {id = s.Field<string>(ColumnName),}) 
    .Distinct() 
    .Where(f => 
     f.id != null && 
     f.id.Contains(TxtStringSearchInput.Text)) 
    .ToList(); 

 Смежные вопросы

  • Нет связанных вопросов^_^