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