【发布时间】:2019-05-20 10:52:21
【问题描述】:
对于我的 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; }
}
以及我使用 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);
}
【问题讨论】:
-
也许你只需要
new BookModel { ... }而不是new { ... }?您需要使用匿名类型吗? -
@JonSkeet 这只是出于好奇.. 没有任何要求。
-
如果某些处理需要我们临时创建一些东西然后从中提取其他东西,那么匿名类型很方便。在那种情况下,匿名类型的成员可能非常明显,但也许它是一次性使用,并且为在方法中暂时使用的东西创建一个类似乎有点过分。如果您知道您的数据代表
BookModel,那么跳过匿名类型并只使用类几乎肯定更有意义。
标签: c# asp.net-mvc lambda