Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从对象列表中查找字符串属性中的特定字符_C#_Linq - Fatal编程技术网

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

C# 从对象列表中查找字符串属性中的特定字符,c#,linq,C#,Linq,我需要根据特定属性(字符串类型)是否在位置19包含字符“S”(或“N”)来过滤对象列表 我把这个用C#表示: IQueryable lstTipoGasto=objServiceClient.ListaTabla5(int.Parse(number)).AsQueryable(); Tabla5 objTipoGasto=新Tabla5(); objTipoGasto.NombreNom5=“Seleccione..”; objTipoGasto.CodigoNom5=-1; objTipoGa

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

我把这个用C#表示:

IQueryable lstTipoGasto=objServiceClient.ListaTabla5(int.Parse(number)).AsQueryable();
Tabla5 objTipoGasto=新Tabla5();
objTipoGasto.NombreNom5=“Seleccione..”;
objTipoGasto.CodigoNom5=-1;
objTipoGasto.TextNom5=“…”;
List lst=lstTipoGasto.ToList();
第一次增补(objTipoGasto);
lstTipoGasto=lst.AsQueryable();
var lista=lstTipoGasto.AsEnumerable().ToList()。其中(x=>x.AgregaTabl.Contains(“S”))
.选择(x=>new
{ 
x、 密码子5,
x、 NombreNom5,
x、 文本编号5,
x、 阿格雷塔布尔
}).OrderBy(x=>x.CodigoNom5.ToList();
uddlTipoGasto.DataSource=lista;
uddlTipoGasto.DisplayMember=“NombreNom5”;
uddlTipoGasto.ValueMember=“CodigoNom5”;
uddlTipoGasto.ValueMember=“TextNom5”;
我有个例外。知道为什么吗?

试试

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.是否包含(“S”)
,不如检查
x.AgregaTabl.Length>18
,这样我们就知道它至少有19个字符,然后我们检查
(x.AgregaTabl[18]='S'| | x.AgregaTabl[18]='N')
,看看第19个字符是'S'还是'N'(注:x.AgregaTabl[18]由于基于0的索引,访问第19个字符)。

异常消息是什么?另外,您的代码现在没有检查位置19处的字符。您似乎没有检查位置19,您只是使用了
Contains()
。例外情况是(西班牙语):referencea a objeto no establecida como instancia de un objeto。原始查询:
var lista=lstTipoGasto.AsEnumerable().ToList()。其中(x=>x.AgregaTabl.Substring(18,1).Equals(“S”)).Select(x=>new{x.CodigoNom5,x.NombreNom5,x.TextNom5,x.AgregaTabl}).OrderBy(x=>x.CodigoNom5.ToList();
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();