从对象列表中查找字符串属性中的特定字符

时间:2015-08-03 14:31:58

标签: c# linq

我需要根据特定属性(字符串类型)是否包含字符' 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";  

我得到一个例外。有什么想法吗?

1 个答案:

答案 0 :(得分: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个字符是否为&#39 ; S&#39;或者&#39; N&#39; (注意:由于基于0的索引,x.AgregaTabl [18]访问第19个字符)。