2011-09-09 42 views
6
/// <summary> 
/// Returns list of popular searches 
/// </summary> 
public static string[] getPopularSearches(int SectionID, int MaxToFetch) 
{ 
    using (MainContext db = new MainContext()) 
    { 
     return (from c in db.tblSearches where c.SectionID == SectionID && c.Featured select new[] { c.Term }); 
    } 
} 

Tôi nhìn câu hỏi khác, nhưng họ dường như là hơi khác nhau, tôi nhận được lỗi:LINQ trở lại chuỗi mảng

Cannot implicitly convert type 'System.Linq.IQueryable<string[]>' to 'string[]' 

Tôi biết điều này có lẽ là đơn giản, ai đó có thể chỉ ra những gì sai ở đây xin vui lòng ?

+0

Có lý do cụ thể nào bạn cần trả về mảng không? IEnumerable sẽ thích hợp hơn trong hầu hết các trường hợp, trừ khi mã gọi đặc biệt yêu cầu một mảng (không) – MattDavey

Trả lời

15

chắc - bạn đang cố gắng trả về từ phương thức được khai báo để trả về số string[], nhưng bạn đang trả lại truy vấn - không phải là một chuỗi trong chính nó. Cách đơn giản nhất để chuyển đổi truy vấn thành mảng là gọi phương thức mở rộng ToArray.

Tuy nhiên, khi bạn đã chọn một mảng chuỗi cho mọi phần tử trong truy vấn, điều đó thực sự sẽ trả về string[][]. Tôi nghi ngờ bạn thực sự muốn chọn một chuỗi duy nhất cho mỗi yếu tố truy vấn, và sau đó chuyển đổi toàn bộ điều vào một mảng, tức là mã như thế này:

public static string[] GetPopularSearches(int sectionID, int maxToFetch) 
{ 
    using (MainContext db = new MainContext()) 
    { 
     var query = from c in db.tblSearches 
        where c.SectionID == sectionID && c.Featured 
        select c.Term; 
     return query.Take(maxToFetch) 
        .ToArray(); 
    } 
} 

Lưu ý rằng:

  • Tôi đã đổi tên thành phương pháp và các thông số để phù hợp với công ước NET đặt tên
  • tôi đã thêm một cuộc gọi đến Take để sử dụng các tham số maxToFetch
+0

Tuyệt vời như mọi khi cảm ơn bạn: D –

+3

Xin chào Jon Tôi đã làm một bức ảnh cho bạn :) http: // i .stack.imgur.com/4CSKh.png –

4

Bạn đang cố trả lại truy vấn không được thực hiện. Truy vấn chỉ được đánh giá khi được liệt kê. May mắn cho bạn, phương pháp ToArray lấy nỗi đau ra khỏi liệt kê và lưu trữ. Chỉ cần thêm nó vào cuối truy vấn của bạn sẽ khắc phục mọi thứ.

return (
    from c in db.tblSearches 
    where c.SectionID == SectionID && c.Featured 
    select new[] { c.Term } 
).ToArray(); 

EDIT

Nhìn một cách chi tiết hơn, có lẽ:

return (
    from c in db.tblSearches 
    where c.SectionID == SectionID && c.Featured 
    select new[] { c.Term } 
).SelectMany(x => x).ToArray(); 

để làm phẳng các kết quả của truy vấn của bạn, hoặc thậm chí (ít dư thừa):

return (
    from c in db.tblSearches 
    where c.SectionID == SectionID && c.Featured 
    select c.Term 
).ToArray(); 
+0

Nếu tôi muốn hai trường, không chỉ c.Term, nó sẽ trông như thế nào? –

+0

@AlanFisher Bạn có thể chọn một đối tượng ẩn danh: '... chọn mới {c.Term, c.SectionID}' – spender

0

Add. ToArray() ở cuối câu lệnh return.

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