Odata2 Фильтрация родительских или дочерних элементов разных типов - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь отфильтровать вложенные данные, но проблема в том, что дети, которых я также пытаюсь отфильтровать, имеют другой тип.

У меня есть данные, которые выглядят следующим образом:

{
    "value": [
        {
            "UserName": "scottketchum",
            "FirstName": "Scott",
            "LastName": "Ketchum",
            "MiddleName": null,
            "Gender": "Male",
            "Age": null,
            "Emails": [
                "Scott@example.com"
            ],
            "FavoriteFeature": "Feature1",
            "Features": [],
            "AddressInfo": [
                {
                    "Address": "2817 Milton Dr.",
                    "City": {
                        "Name": "Albuquerque",
                        "CountryRegion": "United States",
                        "Region": "NM"
                    }
                }
            ],
            "HomeAddress": null
        },
{
            "UserName": "harryingram",
            "FirstName": "Harry",
            "LastName": "Ingram",
            "MiddleName": null,
            "Gender": "Male",
            "Age": null,
            "Emails": [
                "Harry@example.com"
            ],
            "FavoriteFeature": "Feature2",
            "Features": [],
            "AddressInfo": [
                {
                    "Address": "123 Scott Ln.",
                    "City": {
                        "Name": "Nashville",
                        "CountryRegion": "United States",
                        "Region": "TN"
                    }
                }
            ],
            "HomeAddress": null
        }
    ]
}

Мне нужно ввести слово «Скотт» в поле поиска и вернуть любого человека, имеющего имя «Скотт» или адрес со словом «Скотт» в нем. Так что в идеале поиск вернет обоих людей.

1 Ответ

0 голосов
/ 13 июля 2020

  void searchitemfromjson(string s)
        {
            var text = File.ReadAllText("D://jsontest.txt");
            var jObject1 = JObject.Parse(text)["value"];
            var searchs = new List<string>();
            foreach (var item in jObject1)
            {
                var jObjitem = JObject.Parse(item.ToString());
                IList<string> keys = jObjitem.Properties().Select(p => p.Name).ToList();
                foreach (var k in keys)
                {
                    if (k == "UserName")
                    {
                        if (jObjitem[k].ToString().Contains(s)) searchs.Add(jObjitem[k].ToString());
                    }
                    else if(k == "AddressInfo")
                    {
                        if(jObjitem["AddressInfo"][0]["Address"].ToString().Contains(s)) searchs.Add(jObjitem[k].ToString()); ;
                    }

                }
            }
        }
...