我正在尝试使用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(IEnumerable1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable
1来源)
我在这里做错了什么?
答案 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();
这可能有用......