LINQ Orderby降序查询


438

我相信这将是一个相对简单的过程。

我有一个LINQ查询,我想在最近创建的日期之前对其进行排序。

看到:

        var itemList = from t in ctn.Items
                        where !t.Items && t.DeliverySelection
                        orderby t.Delivery.SubmissionDate descending
                        select t;

我也尝试过:

       var itemList = (from t in ctn.Items
                        where !t.Items && t.DeliverySelection
                        select t).OrderByDescending();

但这给出了一个错误:

方法'OrderByDescending'的重载不接受0个参数

从我所阅读的内容中,我相当确定我做的第一种方法应该可以工作。我尝试将降序更改为升序,只是看它是否有任何作用,但保持不变。

如果有人可以看一下查询,看看我做错了什么,我将不胜感激。谢谢 :)

Answers:


673

您需要选择一个属性进行排序,并将其作为lambda表达式传递给 OrderByDescending

喜欢:

.OrderByDescending(x => x.Delivery.SubmissionDate);

确实,尽管您的LINQ语句的第一个版本应该可以工作。是t.Delivery.SubmissionDate实际上有效日期填充?


2
嗨,Optus,谢谢您的答复。我已经弄清楚了问题所在。我使用的是paginatedList,它实际上是从该帮助器类进行排序的。时间到了,我会标记您的回答正确:)
109221793 2011年

175

我认为这第一次失败,因为您正在订购的值为null。如果Delivery是与外键关联的表,则应首先包括此表,例如以下示例:

var itemList = from t in ctn.Items.Include(x=>x.Delivery)
                    where !t.Items && t.DeliverySelection
                    orderby t.Delivery.SubmissionDate descending
                    select t;

include等效于DataLoadOptions dlo = new DataLoadOptions(); dlo.LoadWith <Items>(i => i.Delivery); ctn.LoadOptions = dlo;
mrosiak 2015年

29

我认为第二个应该是

var itemList = (from t in ctn.Items
                where !t.Items && t.DeliverySelection
                select t).OrderByDescending(c => c.Delivery.SubmissionDate);

我认为对他来说是公平的,我在发布时输入了错误的查询(即,留在倒数第二行),他可能只是复制并粘贴以演示lambda OrderByDescending的使用。
109221793 2011年

6

只是出于某种原因,以我喜欢使用的其他格式显示它:第一种方法将itemList返回为System.Linq.IOrderedQueryable

using(var context = new ItemEntities())
{
    var itemList = context.Items.Where(x => !x.Items && x.DeliverySelection)
                                .OrderByDescending(x => x.Delivery.SubmissionDate);
}

这种方法很好,但是如果您希望直接将其放入List对象:

var itemList = context.Items.Where(x => !x.Items && x.DeliverySelection)
                                .OrderByDescending(x => x.Delivery.SubmissionDate).ToList();

您所要做的就是将.ToList()调用附加到查询的末尾。

需要注意的是,我想不起来在where()调用中是否可以接受!(not)表达式。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.