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();