2015-08-03 2 views
-1

Мне нужно отфильтровать список объектов в зависимости от того, содержит ли конкретное свойство (тип строки) символ «S» (или «N») в позиции 19.Найти конкретный символ в строковом объекте из списка объектов

у меня есть это в C#:

IQueryable<Tabla5> lstTipoGasto = objServiceClient.ListaTabla5(int.Parse(number)).AsQueryable(); 
Tabla5 objTipoGasto = new Tabla5(); 
objTipoGasto.NombreNom5 = "Seleccione.."; 
objTipoGasto.CodigoNom5 = -1; 
objTipoGasto.TextNom5 = "..."; 
List<Tabla5> lst = lstTipoGasto.ToList(); 
lst.Add(objTipoGasto); 
lstTipoGasto = lst.AsQueryable(); 

var lista = lstTipoGasto.AsEnumerable().ToList().Where(x => x.AgregaTabl.Contains("S")) 
    .Select(x => new 
    { 
     x.CodigoNom5, 
     x.NombreNom5, 
     x.TextNom5, 
     x.AgregaTabl 
    }).OrderBy(x => x.CodigoNom5).ToList(); 

uddlTipoGasto.DataSource = lista;    
uddlTipoGasto.DisplayMember = "NombreNom5"; 
uddlTipoGasto.ValueMember = "CodigoNom5"; 
uddlTipoGasto.ValueMember = "TextNom5"; 

я получаю исключение. Любые идеи почему?

+3

Какое сообщение об исключении? Также ваш код не проверяет персонаж в позиции 19 прямо сейчас. –

+0

Не похоже, что вы проверяете позицию 19, вы просто используете 'Contains()' .. – haim770

+0

Исключение составляет (на испанском): Referencia a objeto no establecida como instancia de un objeto. –

ответ

0

Постарайся ...

var lista = lstTipoGasto.AsEnumerable() 
    .ToList() 
    .Where(x => x.AgregaTabl.Length > 18 && 
      (x.AgregaTabl[18] == 'S' || x.AgregaTabl[18] == 'N')) 
    .Select(x => new 
    { 
     x.CodigoNom5, 
     x.NombreNom5, 
     x.TextNom5, 
     x.AgregaTabl 
    }).OrderBy(x => x.CodigoNom5).ToList(); 

Вместо проверки, если x.AgregaTabl.Contains("S"), вы убедитесь, что x.AgregaTabl.Length > 18 поэтому мы знаем, что он имеет по крайней мере 19 символов, то мы проверяем (x.AgregaTabl[18] == 'S' || x.AgregaTabl[18] == 'N'), чтобы увидеть, если 19-й символ «S» или «N» (Примечание: x.AgregaTabl [18] обращается к 19-му символу из-за индексов 0).