Фильтрация IEnumerable данных с использованием Linq в ASP.NET Web API 2 - PullRequest
0 голосов
/ 07 января 2019

Мне нужно отфильтровать данные. Но я не знаю, как использовать Linq.

Модель ClassRoom

public class ClassRoom
{
    public int RoomID { get; set; }
    public string Name { get; set; }
    public List<Student> Students { get; set; }
}

Модель студента

public class Student
{
    public int StudentId { get; set; }
    public string Name { get; set; }
    public int StyleId {get;set;}
}

Пример JSON DATA

  var json= 

    [
        {
            "RoomID": 1,
            "Name": "A Class",
            "Students": [{
                "StudentId": 1,
                "Name":"Charlie",
                "StyleId":"1"
            },
            {
                "StudentId": 2,
                "Name":"Tom",
                "StyleId":"2"
            }
           ]
        },
        {
            "RoomID": 2,
            "Name": "B Class",
            "Students": [{
                "StudentId": 3,
                "Name":"ALLEN",
                "StyleId":"2"
            },
            {
                "StudentId": 4,
                "Name":"Jeremy",
                "StyleId":"2"
            },
            {
                "StudentId": 5,
                "Name":"Curry",
                "StyleId":"3"
            }
           ]
        }

      ]

Если я хочу, чтобы StyleID равнялся "2", и ниже ожидается ответ.

var json = 
 [
    {
        "RoomID": 1,
        "Name": "A Class",
        "Students": [
        {
            "StudentId": 2,
            "Name":"Tom",
            "StyleId":"2"
        }
       ]
    },
    {
        "RoomID": 2,
        "Name": "B Class",
        "Students": [{
            "StudentId": 3,
            "Name":"ALLEN",
            "StyleId":"2"
        },
        {
            "StudentId": 4,
            "Name":"Jeremy",
            "StyleId":"2"
        }
       ]
    }

  ]

Вот как я подаю, но не правильно. как я могу получить ожидаемые данные?

json.Select( v => v.Students.where( i => i.StyleId == "2") )

спасибо.

1 Ответ

0 голосов
/ 07 января 2019

Попробуйте запрос linq, как показано ниже.

var result = json.Where(v => v.Students.Any(y => y.StyleId == "2"))
                .Select(v => new ClassRoom() {  
                    RoomID = v.RoomID,
                    Name = v.Name,
                    Students = v.Students.Where(y => y.StyleId == "2")
                });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...