Сортировка XML используется LINQ в ASP.NET MVC - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь заставить сортировку работать для определенных столбцов из XML-файла.Вот что у меня есть.

    public ActionResult Index(string sortOrder)
    {
        IEnumerable<Personal> personals;
        XmlDocument doc = new XmlDocument();
        List<Personal> persons = new List<Personal>();
        doc.Load("C:\\Users\\Matt.Dodson\\Desktop\\SampleWork\\PersonsApplicationFromXMLFile\\PersonsApplicationFromXMLFile\\DAL\\Personal.xml");
        foreach (XmlNode node in doc.SelectNodes("/Persons/record"))
        {
            persons.Add(new Personal
            {
                ID = node["ID"].InnerText,
                Name = node["Name"].InnerText,
                Email = node["Email"].InnerText,
                DateOfBirth = node["DateOfBirth"].InnerText,
                Gender = node["Gender"].InnerText,
                City = node["City"].InnerText
            });
        }
        switch (sortOrder)
        {
            case "ID":
                personals = persons.OrderBy(Personal => Personal.ID);
                break;
            case "Name":
                personals = persons.OrderBy(Personal => Personal.Name);
                break;
            case "City":
                personals = persons.OrderBy(Personal => Personal.City);
                break;
            default:
                break;
        }
        return View(persons);
    }

Вещи, которые я пытался включить, включают .getElementByTagName ("ID"). ToString (). OrderBy (...), но безрезультатно.Я почти уверен, что у меня неправильный синтаксис.Пожалуйста, помогите и спасибо.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Во-первых, вам нужно вернуть анкету

...
return View(personals);
0 голосов
/ 27 сентября 2018

Я думаю, вам нужно разрешить отсортированному результату коллекции быть установленным на persons, иначе коллекция не была бы упорядочена.

switch (sortOrder)
{
    case "ID":
        persons = persons.OrderBy(Personal => Personal.ID).ToList();
        break;
    case "Name":
        persons = persons.OrderBy(Personal => Personal.Name).ToList();
        break;
    case "City":
        persons = persons.OrderBy(Personal => Personal.City).ToList();
        break;
    default:
        break;
}
return View(persons);

Я бы использовал linq вместо foreach пусть код станет более понятным.

SelectNodes("/Persons/record").Cast<XmlNode>() используйте Cast<XmlNode>() пусть XmlNodeList до IEnumerable<XmlNode>, а затем используйте linq select.

public ActionResult Index(string sortOrder)
{
    XmlDocument doc = new XmlDocument();
    doc.Load("C:\\Users\\Matt.Dodson\\Desktop\\SampleWork\\PersonsApplicationFromXMLFile\\PersonsApplicationFromXMLFile\\DAL\\Personal.xml");
    IEnumerable<Personal> persons = doc.SelectNodes("/Persons/record")
        .Cast<XmlNode>()
        .Select(node => new Personal()
        {
            ID = node["ID"].InnerText,
            Name = node["Name"].InnerText,
            Email = node["Email"].InnerText,
            DateOfBirth = node["DateOfBirth"].InnerText,
            Gender = node["Gender"].InnerText,
            City = node["City"].InnerText
        });
    switch (sortOrder)
    {
        case "ID":
            persons = persons.OrderBy(Personal => Personal.ID);
            break;
        case "Name":
            persons = persons.OrderBy(Personal => Personal.Name);
            break;
        case "City":
            persons = persons.OrderBy(Personal => Personal.City);
            break;
        default:
            break;
    }
    return View(persons.ToList());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...