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

本文关键字:字符 属性 字符串 对象 列表 查找 | 更新日期: 2023-09-27 18:06:18

我需要根据特定属性(字符串类型)是否在位置19中包含字符'S'(或'N')来过滤对象列表。

我在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";  

我得到一个异常。知道为什么吗?

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

Try…

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.a regatabl[18]访问第19个字符,因为索引为0)。