从对象列表中查找字符串属性中的特定字符
本文关键字:字符 属性 字符串 对象 列表 查找 | 更新日期: 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)。