Как преобразовать .List <anonymous>в .List <classname>? - PullRequest
0 голосов
/ 20 мая 2019

Для моей сущности Book я хочу сделать запрос, чтобы выбрать требуемые свойства и вернуть его в виде списка в другой тип списка <BookModel>, из которого я буду использовать в качестве модели в моем представлении.Но в этой строке кода красная волнистая линия указывает на ошибку с сообщением:

cannot convert system.collections.generic.List<anonymous> to system.collections.generic.List<BookModel> 

Конечно, я могу использовать класс Select(b=> new BookModel{...}) вместо анонимного типа для создания типа объекта списка, но мне интересно, есть лиспособ вернуть это без использования BookModel, только с помощью анонимного типа?

здесь есть свойство типа List, которое я хочу вернуть моему анонимному типу

public class HomeModel
{
    public List<BookModel> PopularBooks { get; set; } 
    public List<BookModel> BestSales { get; set; }
} 

, и метод действия, который я выполняю, используя лямбда-выражения.

public ActionResult HomeIndex()
{
    HomeModel model = new HomeModel();
    var bestSalebooks = db.Books.Where(b => b.IsApproved).OrderBy(b => b.DisplayNumber).Select(b => new
    {
        Id =  b.Id,
        Name = b.Name,
        Description = b.Description,
        Price = b.Price,
        DateAdded = b.DateAdded,
        CategoryId = b.CategoryId

    }).ToList();
    model.BestSales = bestSalebooks; //cannot convert system.collections.generic.List<anonymous> to system.collections.generic.Lis<BookModel>            
    return View(model);
}

1 Ответ

3 голосов
/ 20 мая 2019

В общем, я бы посоветовал вам создать экземпляр требуемого типа. То есть, если вам нужен BookModel, создайте его экземпляр вместо создания анонимного типа.

Вы создаете анонимный тип при выполнении шага Select. В любом случае вы также можете привести анонимный тип к вашему конкретному типу, выполнив:

public ActionResult HomeIndex()
{
    HomeModel model = new HomeModel();
    var bestSalebooks = db.Books.Where(b => b.IsApproved).OrderBy(b => b.DisplayNumber).Select(b => (BookModel)(new
    {
        Id =  b.Id,
        Name = b.Name,
        Description = b.Description,
        Price = b.Price,
        DateAdded = b.DateAdded,
        CategoryId = b.CategoryId

    })).ToList();
    model.BestSales = bestSalebooks;            
    return View(model);
}

Делая это, вы создаете список BookModel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...