我有一个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();

但是这会产生一个错误:

No overload for method 'OrderByDescending' takes 0 arguments

据我所知,第一种方法是。我试过把降序改成升序只是想看看效果如何,结果还是一样。

我做错了什么?


您需要选择一个Property来排序,并将其作为lambda表达式传递给orderbydescent

如:

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

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

我想第二个应该是

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

我认为第一个失败是因为你的排序值为空。如果Delivery是一个外键关联表,那么你应该先包含这个表,示例如下:

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

只是用一种不同的格式来展示它,出于某种原因,我更喜欢用这种格式: 第一种方法以System.Linq.IOrderedQueryable形式返回itemList

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

这种方法很好,但如果你想把它直接放到一个列表对象中:

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

你所要做的就是在查询的末尾追加一个. tolist()调用。

需要注意的是,我不记得Where()调用中!(not)表达式是否可以接受。