对于我的Book实体,我想查询以选择所需的属性,并将其作为列表返回到另一种<BookModel>
的列表类型中,我将在列表中将其用作模型。但是在这行代码中,红色的波浪线表示错误消息:
cannot convert system.collections.generic.List<anonymous> to system.collections.generic.List<BookModel>
我当然可以使用Select(b=> new BookModel{...})
类而不是匿名类型来创建列表对象类型,但是我想知道是否有一种方法可以不使用BookModel而仅通过使用匿名类型来返回此对象?
这是我想返回匿名类型的列表类型的属性
public class HomeModel
{
public List<BookModel> PopularBooks { get; set; }
public List<BookModel> BestSales { get; set; }
}
以及我使用lambda表达式进行查询的操作方法。
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);
}
答案 0 :(得分:3)
通常,我建议您实例化所需的类型。也就是说,如果您需要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列表。