2013-08-03 36 views
5

Tôi mới đến MVC.mvc dao cạo foreach theo quan điểm với dữ liệu được sắp xếp

Tôi muốn triển khai sắp xếp dữ liệu trên trang html của mình. Tôi có một mô hình mà được tạo ra với mã này:

public IEnumerable<PercConfigEntry> GetPercConfigEntries() 
{ 
    var results = from g in this.context.PercConfigEntry 
        where g.Key == "ConfigEntries" 
        select g; 
    return results; 
} 

Và một cái nhìn:

@model IEnumerable<PercConfigEntry> 
@foreach (var config in Model) 
{ 
    ... 
} 

này hoạt động. Nhưng khi tôi thêm "orderby" vào truy vấn như thế này:

public IEnumerable<PercConfigEntry> GetPercConfigEntries() 
{ 
    var results = from g in this.context.PercConfigEntry 
        where g.Key == "ConfigEntries" 
        orderby g.ConfigName 
        select g; 
    return results; 
} 

nó ném DataServiceQueryException on foreach.

Có vấn đề gì?

Xin cảm ơn trước.

+0

Tôi nghi ngờ điều này có liên quan đến MVC hoặc dao cạo. Tôi đoán đó là vấn đề với nhà cung cấp truy vấn dịch vụ dữ liệu của bạn. Nếu bạn gọi 'ToList()' bên trong 'GetPercConfigEntries()' ngoại lệ sẽ xảy ra ở đó. –

+0

Cố gắng gọi 'ToList()' và sau đó sử dụng thứ tự bằng 'results.OrderBy (x => x.ConfigName)' – Nilesh

+0

'var results = (từ g trong this.context.PercConfigEntry trong đó g.Key ==" ConfigEntries " select g) .OrderBy (o => o.ConfigName);' – christiandev

Trả lời

2

Sự cố có liên quan đến nhà cung cấp truy vấn của bạn; có lẽ nó chỉ đơn giản là không hỗ trợ đặt hàng. Nếu không có thêm bất kỳ thông tin, tôi khuyên bạn nên điều này:

public IEnumerable<PercConfigEntry> GetPercConfigEntries() 
{ 
    var results = 
     (from g in this.context.PercConfigEntry 
     where g.Key == "ConfigEntries" 
     select g) 
     .AsEnumerable() 
     .OrderBy(g => g.ConfigName); 
    return results; 
} 

Hoặc trong cú pháp thông thạo:

public IEnumerable<PercConfigEntry> GetPercConfigEntries() 
{ 
    var results = this.context.PercConfigEntry 
     .Where(g => g.Key == "ConfigEntries") 
     .AsEnumerable() 
     .OrderBy(g => g.ConfigName); 
    return results; 
} 

Điều này buộc các truy vấn được thực hiện vào nhà cung cấp mà không cần bất kỳ đặt hàng, sau đó lại đơn đặt hàng nó trên máy khách — nói cách khác, cuộc gọi tới AsEnumerable ngắt kết nối hiệu quả tập kết quả từ nhà cung cấp truy vấn sao cho OrderBy (hoặc bất kỳ phương pháp tiếp theo nào) được đánh giá trên máy khách. Điều này có lẽ không hiệu quả như việc cho phép nhà cung cấp đặt hàng, nhưng nếu nhà cung cấp không hỗ trợ đặt hàng, đây là cách duy nhất để thực hiện điều đó.