vistas una tablas rendimiento recomendaciones queries porque optimizador lenta las dañan cuello consulta consejos como botella agilizar c# linq json.net

c# - una - ¿Cómo se obtiene o no la lista de objetos de la lista de proyectos basados ​​en la clave?



view lenta mysql (3)

Este es mi código:

List<JObject> students =[{"id":"101","name":"one","parent_id":"1"},{"id":"102","name":"two","parent_id":"2"},{"id":"103","name":"three"},{"id":"104","name":"four"}];

Probé el siguiente código usando Linq pero no funcionaba

List<JObject> newStudents = students.Where(x => x.Property("parent_id").ToString() == null).ToList(); List<JObject> existedStudents = students.Where(x => x.Property("parent_id").ToString() != null).ToList();

En la lista anterior contiene 4 objetos, los primeros dos objetos contienen la clave parent_id los dos objetos siguientes no contienen. Cómo existía la clave parent_id y no existía en c #.


De acuerdo con la documentación , JObject.Property devuelve null si la propiedad no existe

Así

x.Property("parent_id").ToString()

lanzará una NullReferenceException si parent_id no existe.

Para verificar si existe una propiedad, no use ToString() , simplemente compare Property con null :

List<JObject> newStudents = students.Where(x => x.Property("parent_id") == null).ToList();


Deberías hacer lo siguiente

List<JObject> newStudents = students.Where(x => x.Property("parent_id").Value<string>() == null).ToList(); List<JObject> existedStudents = students.Where(x => x.Property("parent_id").Value<string>() != null).ToList();


Si la propiedad no existe, el método de Property devuelve nulo, según la documentación .

Así que no llame a .ToString() , de lo contrario obtendrá una NullReferenceException . En lugar:

List<JObject> newStudents = students.Where(x => x.Property("parent_id") == null).ToList();