Truy vấn giảm dần thứ tự LINQ


439

Tôi chắc chắn rằng đây sẽ là một tương đối đơn giản.

Tôi có một truy vấn LINQ mà tôi muốn đặt hàng trước ngày được tạo gần đây nhất.

Xem:

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

Tôi cũng đã thử:

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

nhưng điều này gây ra lỗi:

Không quá tải cho phương thức 'OrderByDesceinating' mất 0 đối số

Từ những gì tôi đã đọc, tôi khá chắc chắn rằng cách đầu tiên tôi đã làm nó sẽ hoạt động. Tôi đã cố gắng thay đổi giảm dần lên tăng dần chỉ để xem liệu nó có làm gì không nhưng nó vẫn giữ nguyên.

Tôi sẽ biết ơn nếu ai đó có thể xem truy vấn và xem liệu tôi có làm gì sai không. Cảm ơn :)

Câu trả lời:


674

Bạn cần chọn một Thuộc tính để sắp xếp và chuyển nó dưới dạng biểu thức lambda để OrderByDescending

giống:

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

Thực sự, mặc dù phiên bản đầu tiên của câu lệnh LINQ của bạn sẽ hoạt động. Có t.Delivery.SubmissionDatethực sự được điền với ngày hợp lệ?


2
Hi optus, cảm ơn bạn đã trả lời. Tôi đã tìm ra vấn đề là gì. Tôi đã sử dụng một danh sách phân trang, và nó thực sự đang thực hiện thứ tự từ lớp người trợ giúp đó. Tôi sẽ đánh dấu câu trả lời của bạn là chính xác khi hết thời gian :)
109221793 17/03/2016

175

Tôi nghĩ điều này đầu tiên thất bại bởi vì bạn đang đặt giá trị là null. Nếu Giao hàng là một khóa ngoại liên quan đến bảng thì bạn nên bao gồm bảng này trước, ví dụ bên dưới:

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

bao gồm tương đương với DataLoadOptions dlo = new DataLoadOptions (); dlo.LoadWith <Item> (i => i.Delivery); ctn.LoadOptions = dlo;
mrosiak

29

Tôi nghĩ rằng cái thứ hai nên

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

Tôi nghĩ là công bằng với anh ta, tôi đã gõ sai truy vấn khi tôi đăng (ví dụ: Rời khỏi dòng thứ tự cuối cùng thứ hai) và anh ta có lẽ chỉ sao chép và dán để chứng minh việc sử dụng OrderByDesceinating.
109221793 17/03/2016

6

Chỉ để hiển thị nó ở một định dạng khác mà tôi thích sử dụng vì một số lý do: Cách đầu tiên trả về itemList của bạn dưới dạng System.Linq.IOrderedQueryable

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

Cách tiếp cận này là tốt, nhưng nếu bạn muốn nó thẳng vào Danh sách đối tượng:

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

Tất cả những gì bạn phải làm là nối một lệnh gọi .ToList () vào cuối Truy vấn.

Một cái gì đó cần lưu ý, ngoài đỉnh đầu tôi không thể nhớ lại nếu biểu thức! (Không) có thể chấp nhận được trong cuộc gọi Where ().

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.