2009-08-10 40 views
13

Chỉ cần tìm hiểu LINQ và tôi đã đi đến một rào cản newbie trong dự án thử nghiệm của tôi. Bạn có thể giải thích những gì tôi đang làm sai?Làm thế nào để chuyển đổi một IQueryable <T> thành một Danh sách <T>?

public List<ToDoListInfo> retrieveLists(int UserID) 
{ 
//Integrate userid specification later - need to add listUser table first 
IQueryable<ToDoListInfo> lists = 
    from l in db.ToDoLists 
    select new ToDoListInfo { 
     ListID = l.ListID, 
     ListName = l.ListName, 
     Order = l.Order, 
     Completed = l.Completed 
    }; 

    return lists.ToList<ToDoListInfo>; 
}  

tôi nhận được một lỗi nói như sau:

Cannont chuyển đổi phương pháp nhóm 'ToList' để không đại biểu loại 'System.Collections.Generic.List' Bạn có ý định gọi phương thức?

+1

đầu mối là trong "Bạn có ý định gọi phương pháp này?" –

Trả lời

27

Bạn chỉ cần parantheses:

lists.ToList<ToDoListInfo>();

Ngoài ra, bạn không cần phải khai báo các tham số kiểu, nghĩa là bạn có thể sử dụng sau và để cho các loại hệ thống suy ra các tham số kiểu:

lists.ToList();

+1

Khai báo tham số kiểu tên có thể thực sự là một điều * xấu * ở đây, vì bạn phải khớp với tham số kiểu của 'liệt kê'' IEnumerable 'thực hiện, điều này có thể gây ra lỗi biên dịch; tốt hơn để cho [loại-suy luận] (http://geekswithblogs.net/sdorman/archive/2007/04/06/111034.aspx) thực hiện công việc – casperOne

+0

Điều gì sẽ xảy ra nếu tôi muốn chuyển đổi bộ sưu tập iqueryble thành một loại danh sách khác ? Ví dụ, giả sử tôi có hai lớp A & B với chữ ký gần như tương tự. Bây giờ tôi lấy dữ liệu từ A & muốn tạo danh sách loại B, làm thế nào tôi có thể làm điều đó? –

4

Bạn đang chỉ thiếu dấu ngoặc đóng trên ToList phải nộp là:

ToList(); 

hoặc

ToList<ToDoListInfo>(); 
Các vấn đề liên quan