使用 LINQ to SQL 将对象从数据库添加到列表

Add objects from database to a List, using LINQ to SQL

我有一个 table books,我想将其所有内容放入一个 List<book>(现在我被困在添加单个元素上)。 我试过了

public class DataContext
{
    LINQtoSQLDataContext db = new LINQtoSQLDataContext();
    List<book> books = new List<book>();
    public List<book> addBook()
    {
        books.Add((book)from book in db.books where book.bookID == 1 select book);
        return books;
    }
}

但是当我尝试将它设置为我的 wpf dataGrid 的源时,它抛出一个错误:

Unable to cast object of type 'System.Data.Linq.DataQuery`1[DataLayer.book]' to type 'DataLayer.book'.

所以问题是,我如何正确地将数据从数据库转换为列表?

只是return书单如下:

public List<book> addBook()
{
    return (from book in db.books 
        where book.bookID == 1 
        select book)
        .ToList();
}

将方法命名为 addBook 很奇怪,因为该方法的结果是 return 一本书列表。

将其命名为:public List<book> GetBooks()

同时 List<T>.Add(T) Method only allow to add single item to list, to add multiple items into list, you need List<T>.AddRange(IEnumerable<T>) Method.

如果我正确理解你的问题,解决方案比预期的要简单,请尝试像这样创建一个 where 条件:

public class DataContext
{
LINQtoSQLDataContext db = new LINQtoSQLDataContext();
List<book> books = new List<book>();
public List<book> addBook()
{
    books = db.book.Where(x => x.bookId == 1).ToList();
    return books;
} 
}

正如 sr28 指出的那样,这将 return 一个数组。您可以将数组添加到 books 列表中。我个人更喜欢使用方法语法。

我真的不明白你为什么要把这本书添加到这个列表中。但是给你。因为你已经定义了 books 你不需要 return 它,你可以简单地添加 bookbooks.

public void AddBook()
{
    var book = db.books.FirstOrDefault(b => b.BookId == 1);
    books.add(book);
}