如何使用LINQ执行条件顺序

时间:2015-07-19 12:45:02

标签: c# linq sorting

我使用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向我的函数发送一个参数,然后按升序完成排序,或者一些时间排序将完成按降序排列。

所以请指导我如何编写代码,这些代码会将我的数据按时间升序或按降序排序。感谢

2 个答案:

答案 0 :(得分:1)

books.ToList().OrderBy(a=> a.OrderID) 

将导致两个枚举:一个用于ToList(),一个用于OrderBy()。您应该能够通过以下方式获得有序列表:

books.OrderBy(a=> a.OrderID).ToList();

答案 1 :(得分:0)

条件排序很简单,因为'books'将是'IQueryable'的实现,直到你实际枚举它为止。因此,你可以这样做:

if (true)
    books = books.OrderBy();

var results = books.ToList();