2013-05-02 59 views
0

我正在嘗試使用LINQ to Objects將書籍列表綁定到gridview。作者和書籍是自定義對象,其中「作品」在作者類中定義爲列表。LINQ to Objects轉換爲列表以顯示在gridview中

List<Author> authors = new List<Author>(); 
    // list of authors/books is populated here 
    var books = from s in authors 
         where s.LastName == "Jones" 
         select s.Books; 

    GridView2.DataSource = books.AsEnumerable().Cast<Book>().ToList(); 
    GridView2.DataBind(); 

不過,我得到以下錯誤:

System.Web.Services.Protocols.SoapException: Server was unable to process request. --->

System.InvalidCastException: Unable to cast object of type

'System.Collections.Generic.List`1[Book]' to type 'Book'.

at System.Linq.Enumerable.d__aa 1.MoveNext() at System.Collections.Generic.List 1..ctor(IEnumerable 1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable 1 source)

我在做什麼錯在這裏?

+0

可能您有2種不同的書籍類型。一個來自webservice,另一個來自你的項目。 – Andrei 2013-05-02 09:40:13

回答

1

我認爲問題是,書是一個集合。 所以你實際上得到的書籍集合的集合

// list of authors/books is populated here 
var books = (from s in authors 
        where s.LastName == "Jones" 
        select s.Books).SelectMany(c=>c); 

使用SelectMany 會變成你的藏書收集到的一本書:-)

你也可以replease你Cast用的SelectMany:

var books = from s in authors 
         where s.LastName == "Jones" 
         select s.Books; 

    GridView2.DataSource = books.SelectMany(c => c).ToList(); 
    GridView2.DataBind(); 
+0

工作完美,謝謝:) – socketman 2013-05-02 17:33:55

0

這只是一個想法,否則我認爲你很好。 var books =(from s in authors where s.LastName ==「Jones」 select s.Books).Tolist(); 並直接傳遞 GridView2.DataSource = books; GridView2.DataBind();

這可能工作..

+0

這給了我以下錯誤:不能隱式轉換類型'System.Collections.Generic.List >'到'System.Collections.Generic.List ' – socketman 2013-05-02 05:00:07

+0

做一件事。請粘貼「//作者/書籍列表在此填充」的代碼。粘貼這個集合和作者類的綁定代碼,它的定義。我認爲只是類型不匹配 – Prince 2013-05-02 05:03:23