我需要根据特定属性(字符串类型)是否包含字符' 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";
我得到一个例外。有什么想法吗?
答案 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个字符)。