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