6

Tôi đang cố gắng tạo truy vấn trong dịch vụ miền của mình (Ứng dụng doanh nghiệp Silverlight năm 2010) trả về kết quả từ kiểm tra các bài đọc xuất hiện dưới dạng giá trị cụ thể, cơ sở dữ liệu của tôi được thiết lập là:Không thể chuyển đổi hoàn toàn loại 'System.Collections.Generic.List <T>' thành 'System.Linq.IQueryable <T>'

Locations 
    a) Inspections 
    b) InspectionItems 
     c) InspectionReadings  
    a) Areas 
    b) Inspections 
     c) InspectionItems 
      d) InspectionReadings 

Vì vậy, như bạn thấy, có các kiểm tra kiểm tra cho các vị trí trong khu vực và địa điểm. Tôi có một tên POCO gọi StatusList:

public class StatusList 
    { 
     [Key] 
     [Editable(false)] 
     public Guid ID { get; set; } 

     public string LocationName { get; set; } 

     public DateTime LastInspectionDate { get; set; } 

     public string Status { get; set; } 
    } 

mà tôi đang sử dụng để trả lại kết quả của truy vấn:

public IQueryable<StatusList> GetLocationStatus() 
    { 
     var status = (from location in this.ObjectContext.Locations 
         where location.InspectionReadings.Status == value 
         orderby a.DateTaken       
         select new LocationStatusList() 
         { 
          ID = a.ID, 
          LocationName = d.Name,        
         }).ToList<StatusList>(); 
     return status;    
    } 

không may, nó trả lại lỗi trong tiêu đề và tôi không có ý tưởng tại sao như danh sách rõ ràng là một mục danh sách và tôi đã chuyển đổi kết quả

.ToList<LocationStatusList> 
+2

Tại sao bạn trả về 'IQueryable' trong' GetLocationStatus'? 'IQueryable' là (nói không chính thức) được sử dụng để đại diện cho những thứ có thể đếm được ở các địa điểm từ xa. Bạn đã tạo danh sách địa phương làm kết quả của mình. Đó chỉ đơn giản là một 'IEnumerable'. – phg

+0

LINQ to SQL hoặc LINQ to Enities? Nó có vẻ như sau này với tôi. –

+0

Đó là LINQ to Entitites - xin lỗi bạn! – xhedgepigx

Trả lời

18

vấn đề là chính xác bạn đã gọi ToList(). Bạn đã tuyên bố rằng bạn đang trả lại IQueryable<LocationStatusList>List<T> không triển khai IQueryable<T>.

Options (chọn một):

  • Tháo ToList gọi
  • Thay đổi kiểu trả về để IEnumerable<LocationStatusList>, IList<LocationStatusList> hoặc có thể List<LocationStatusList>
  • Gọi AsQueryable() sau ToList():

    ... as before ... 
    .ToList().AsQueryable(); 
    

Lưu ý rằng bạn không cần đối số kiểu trong cuộc gọi ToList - đó cũng giống như cuộc gọi mà trình biên dịch sẽ suy ra.

+0

Tôi đã đi đến kết luận này ngay lập tức trước khi tôi đọc bài đăng này! Cảm ơn bạn - câu trả lời của bạn giải thích tại sao tôi đã nhầm nó ở nơi đầu tiên. Tôi không chắc tại sao tôi lại có ToList(). – xhedgepigx