关于c#:LINQ Orderby Descending Query

LINQ Orderby Descending Query

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

我有一个LINQ查询,我想在最近创建的日期之前订购。

见:

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

我也尝试过:

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

但这会产生一个错误:

No overload for method
'OrderByDescending' takes 0 arguments

从我读到的内容来看,我相当确定我做这件事的第一种方法应该是有效的。我试过将降序改为升序,只是想看看它是否做了什么,但它保持不变。

如果有人能看一下这个问题,看看我是否做错了什么,我将不胜感激。谢谢:


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

像:

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

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


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

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


我想第二个应该是

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


只是为了以不同的格式显示它,出于某种原因我更喜欢使用:第一种方法将项列表返回为System.Linq.IOrderedQueryable

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

这种方法很好,但是如果您希望它直接进入一个列表对象:

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

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

有什么值得注意的,从我的头顶我想不起来如果!(not)表达式在where()调用中是可接受的。