Выберите 3 поля из 10 полей в таблице с помощью LINQ - PullRequest
0 голосов
/ 24 августа 2011

мой запрос:

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 в многоуровневых архитектурах .

Ответы [ 3 ]

7 голосов
/ 24 августа 2011

Попробуйте это:

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, а не коллекцию анонимных типов.

3 голосов
/ 24 августа 2011

Вы не конвертируете в 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 });
0 голосов
/ 24 августа 2011

Я думаю, это

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

если LDEntities.Book - это объекты Book *

...