Hy Guys。
我有两个实体:“交互”和“订单”,它们有很多“交互”。
在视图上,我想要一个不同的类(如<tr class=@cssClass>
)用于未读取交互的订单。所以我创建了一个ViewModel。
我的ViewModel:
public class OrderViewModel
{
public Order Order{get;set;}
public bool isRead{get;set;}
}
我的控制器(我正在使用存储库):
var orders = orderRepo.All();
var viewModel = orders.Select(order=> new orderViewModel
{
Order = order, '<------------'
isRead = order.Interactions.Any(x => x.Read == true),
});
return View(viewModel);
如果我拿出Order = order,
它工作正常。但是使用这段代码我收到了这个错误:
QueryException未被用户代码处理。无法实例化:Models.OrderViewModel
InnerException:从数字转换时,该值必须是小于无穷大的数字 InnerException:确保源类型可转换为目标类型。
如果不使用我使用其属性的对象,它可以正常工作:
ViewModel:
public int IdPedido { get; set; }
public string CategoryOrder { get; set; }
public string ModuleOrder { get; set; }
Controller:
var viewModel = orders.Select( order => new OrderViewModel{
CategoryOrder=Order.Category,
ModuleOrder=Order.Module,
...});
我错过了什么?我不明白应该兑换什么。或者无法在ViewModel上使用Objects,只能使用Properties?
如果它是可用的信息,我正在使用Nhibernate ORM。
Tks伙计们!
修改
基于@elspiko的问题,我意识到订单和订单的类型并不相同。所以我设定了订单:IEnumerable<Order> orders = pedido.Repo.All();
现在它正在运作。
我认为在编辑之前它会起作用。为什么它被认为是不同的类型?
答案 0 :(得分:2)
您的代码看起来不正确,应该是:
var viewModel = orders.Select(order=>new OrderViewModel
{
Order = order, '<------------'
但我认为这只是一个错字?
它可能与延迟加载有关,如果你在select语句上放置一个调试器,订单有什么类型?它是某种形式的代理对象吗?