LINQ to Objects转换为列表以在gridview中显示

时间:2013-05-02 04:46:09

标签: c# asp.net linq web-applications linq-to-objects

我正在尝试使用LINQ to Objects将书籍列表绑定到gridview。 Author和Book是自定义对象,其中“Books”在Author类中定义为列表。

    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:服务器无法执行   处理请求。 ---&GT;

     

System.InvalidCastException:无法转换

类型的对象      

'System.Collections.Generic.List`1 [Book]'键入'Book'。

     

在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来源)

我在这里做错了什么?

2 个答案:

答案 0 :(得分: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 将您的藏书集合变成书籍之一:-)

您还可以使用SelectMany为您的Cast充电:

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

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

答案 1 :(得分:0)

这只是一个想法,否则我觉得你很好。     var books =(来自作者的s                        其中s.LastName ==“琼斯”                        选择s.Books).Tolist(); 并直接传递      GridView2.DataSource = books;      GridView2.DataBind();

这可能有用......