2014-05-22 19 views
5

Làm cách nào để trả về danh sách chứa kết quả của LINQ to SQLquery? Tôi đang thử triển khai này nhưng tôi gặp lỗi này.Cách trả về danh sách từ phương thức trong C#

thể không mặc nhiên chuyển đổi loại 'System.Collections.Generic.List<AnonymousType#1>' để 'System.Collections.Generic.List<object>

Bất kỳ trợ giúp sẽ được đánh giá cao.

public List<Object> getShoes() 
{ 
    var query = from b in db.BrandTbls.AsQueryable() 
       join m in db.ShoeModelTbls on b.BrandID equals m.BrandID 
       join s in db.ShoeTbls on m.ModelID equals s.ModelID 
       join i in db.ShoeImageTbls on s.ShoeID equals i.ShoeID 
       select new { s.ShoeID, s.Size, s.PrimaryColor, s.SecondaryColor, s.Quantity, m.ModelName, m.Price, b.BrandName, i.ImagePath }; 

    return query.ToList(); 
} 
+2

Bạn có thể làm 'trở query.Select (t => (đối tượng) t) .ToList(); '. –

+1

@UlugbekUmirov Sau đó, nó sẽ biên dịch, nhưng người dùng của phương pháp này sẽ không thể sử dụng nó một cách hiệu quả. – Servy

+0

Để tham khảo ... hãy kiểm tra [answer cũ] (http://stackoverflow.com/a/6830406/982431) quá ... – HuorSwords

Trả lời

13

Các loại ẩn danh được thiết kế đặc biệt để sử dụng hoàn toàn trong phạm vi được xác định. Nếu bạn muốn trả về kết quả của truy vấn từ phương thức này, bạn nên tạo một kiểu được đặt tên mới để biểu diễn kết quả truy vấn của bạn và chọn các thể hiện của kiểu được đặt tên đó, không phải là các cá thể của một kiểu ẩn danh.

+0

OK! Cảm ơn. – Tartar

3

Bạn không thể trả về Danh sách trong đó T là một loại ẩn danh; bạn cần trả về một kiểu đã biết. Bạn có thể tạo ra một lớp

public class MyResult 
{ 
    public string ShoeID {get; set;} 
    public string Size {get; set;} 
    public string PrimaryColor {get; set;} 
    public string SecondaryColor {get; set;} 
    public string Quantity {get; set;} 
    public string ModelName {get; set;} 
    public string Price {get; set;} 
    public string BrandName {get; set;} 
    public string ImagePath {get; set;} 
} 

sau đó thay đổi lựa chọn của bạn như vậy

select new MyResult { ShoeID = s.ShoeID, Size = s.Size, PrimaryColor = s.PrimaryColor ........ }; 

và chữ ký phương pháp của bạn sẽ thay đổi để

public List<MyResult> getShoes() 
+0

+1 cho mã để bổ sung cho giải thích của Servy. –

+0

+1. Để rất chính xác, bạn thực sự có thể trả về "Danh sách trong đó T là một loại ẩn danh", nhưng cần phải vượt qua loại ẩn danh đó bên ngoài phương thức. 'Danh sách MyMethod (T giả) {return Enumerable.Repeat (new {Field1: 100}, 10) .ToLsit();} ... var list = MyMethod (new {Field1 = 42})' –

Các vấn đề liên quan