我们如何通过ViewModel
查询选择声明 - 将以下LINQ
传递给视图。我收到的错误如下所示。 请注意我还想通过LINQ查询的select语句加载ViewModel:
模型:
Public class Customer
{
Public int CustomerId {get; set;}
Public string FullName {get; set;}
...
}
Public class Order
{
Public int OrderId {get; set;}
Public int CustomerId {get; set;}
Public float Price {get; set;}
...
}
视图模型:
Public class CustomViewModel
{
Public String Name {get; set;}
Public float Price {get; set;}
...
}
查看:
@model myProject.Models.CustomViewModel
...
控制器:
var qry = from c in _context.Customers
join o in context.Orders on c.CustomerId = o.CustomerId
select new CustomViewModel { Name = c.FullName, Price = o.Price };
return View(qry);
错误:
传递给ViewDataDictionary的模型项的类型为' Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1 [myProject.Models.CustomViewModel]。但是这个ViewDataDictionary实例需要一个类型为' myProject.Models.CustomViewModel]'
的模型项
答案 0 :(得分:2)
您要传递IQueryable<CustomViewModel>
CustomViewModel
,而不是您想要的@model IEnumerable<myProject.Models.CustomViewModel>
实例。我想您想获取名称列表,因此您应该将视图中的模型类型更改为
return View(qry.ToList());
此外,您应该在将结果传递给视图之前实现查询:
DbContext
否则,当您尝试在视图中点击查询结果时,您的return View(qry.FirstOrDefault());
将被处理,因此会抛出异常。
如果您想显示与某个特定客户相关的信息,我建议您使用FirstOrDefault
扩展方法:
$("#yearSlider").slider({step: 20000, min: 0, max: 200000})