从LINQ表中的10个字段中选择3个字段

时间:2011-08-23 21:25:18

标签: c# .net linq-to-entities compiler-errors

我的疑问:

public List<Book> GetAllBook()
{
    return (from c in this.LDEntities.Book
             select new
             {
                 c.IdBook,
                 c.NameBook,
                 c.Athour
             }).ToList();
}

错误:

  

无法将类型'AnonymousType#1'隐式转换为'System.Collections.Generic.List

什么是正确的代码?

更新:我使用Entity Framework in Layered Architectures

3 个答案:

答案 0 :(得分:7)

试试这个:

public List<Book> GetAllBook() {     

    var q = (from c in this.LDEntities.Book              
             select new Book() 
             { 
                 IdBook = c.IdBook, 
                 NameBook = c.NameBook, 
                 Athour = c.Athour }).ToList();     
    return (q); 
} 

换句话说,创建一个Book类型的集合,而不是匿名类型的集合。

答案 1 :(得分:3)

您没有转换为Book个实例。你需要做这样的事情:

from c in LDEntities.Book
select new Book { /* Your Properties to Set */ }

您尝试做的是返回一个匿名对象作为返回类型。所以它试图将List<a'>转换为List<Book>,两者之间没有任何关系。

如果只想返回匿名对象,则需要抽象逻辑并使方法通用:

public List<T> GetAllBook<T>(Func<Book, T> transformer)
{
     return LDEntities.Book.Select(transformer).ToList();
}

然后你可以像这样调用代码:

var myObjects = GetAllBook(x => new { c.IdBook, c.NameBook, c.Athour });

答案 2 :(得分:0)

我猜它是

public List<Book> GetAllBook()
{
    var q = (from c in this.LDEntities.Book
             select c).ToList();
    return (q);
}

如果LDEntities.Book是Book-objects