【发布时间】:2015-07-19 12:45:01
【问题描述】:
我正在使用 linq 从 xml 文件中获取数据。这是我的代码。
XDocument document = XDocument.Load(@"c:\users\tridip\documents\visual studio 2010\Projects\WindowsFormsApplication5\WindowsFormsApplication5\Orders.xml");
var books = from r in document.Descendants("Orders")
.Skip(0)
.Take(5)
select new
{
OrderID = r.Element("OrderID").Value,
CustomerID = r.Element("CustomerID").Value,
EmployeeID = r.Element("EmployeeID").Value,
};
dataGridView1.DataSource= books.ToList().OrderBy(a=> a.OrderID);
当我添加这一行 .OrderBy(a=> a.OrderID); 时,datagridview 不会显示任何数据。
所以我的问题是我们不能以这种方式添加 OrderBy books.ToList().OrderBy(a=> a.OrderID); 吗?
我的第二个问题是如何有条件地进行排序?
我将在某个时间向我的函数发送一个参数,例如ASC,或者某个时间DESC,如果我发送ASC,那么排序将按升序进行,或者有时会按降序进行。
所以请指导我如何编写代码来对我的数据进行一些时间升序或降序排序。谢谢
【问题讨论】:
-
books.ToList().OrderBy(a=> a.OrderID) 将导致两个枚举:立即枚举用于 ToList() 和惰性枚举用于 OrderBy()。您应该能够通过 books.OrderBy(a=> a.OrderID).ToList(); 获得有序列表;
-
您是真的想对数据源进行排序,还是只想按排序顺序查看它。如果是后一种情况,可能使用 ICollectionView 是一个不错的选择。