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表达式传递给
像:
1 | .OrderByDescending(x => x.Delivery.SubmissionDate); |
实际上,尽管LINQ语句的第一个版本应该有效。
我认为这第一次失败是因为您订购的值为空。如果传递是一个与外键关联的表,则应首先包括此表,示例如下:
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()调用中是可接受的。