Сортировка XML используется LINQ в ASP.NET MVC

2

Я пытаюсь, чтобы сортировка работала для определенных столбцов из 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 (...), безрезультатно. Я почти уверен, что у меня есть синтаксис. Пожалуйста, помогите и спасибо.

  • 0
    знакомства! = люди
Теги:
linq
view
controller

2 ответа

4
Лучший ответ

Я думаю, вам нужно, чтобы отсортированный результат сбора был установлен другим 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> select 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());
}
  • 0
    Это просто дало мне еще одну ошибку, вырвав ее из контекста (Список)
  • 0
    @MathewDodson вы просто добавляете .ToList() , потому что я думаю, что ваш взгляд должен использовать тип List<Personal>
Показать ещё 4 комментария
0

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

...
return View(personals);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню