使用导航属性从另一个表发送信息到视图?

时间:2015-06-16 09:36:49

标签: asp.net asp.net-mvc linq asp.net-mvc-5 navigation-properties

这是我的模特

 public class Product
 {
    [Key]
    public int SerialNumber { get; set; }
    public int PartNumber { get; set; }
    public string Description { get; set; }

    public virtual ICollection<Reading> Reading { get; set; }
}

public class Reading
{
    [Key]
    public int Id { get; set; }
    public int SerialNumber { get; set; }
    public int ReadingValue { get; set; }
    public virtual Product Product { get; set; }
}

我可以使用

将所有产品发送到视图
   return View(db.Products.ToList().Where(product => product.CustomerID == Customer));

如果我知道Product SerialNumber

,我可以获得最新的ReadingValue
        var LatestReading = db.Readings.OrderByDescending(m => m.Id).Where(s => s.SerialNumber == SerialNumber).Select(m => m.ReadingValue).FirstOrDefault();

如何使用每种产品的最新ReadingValue将所有产品发送到视图?

2 个答案:

答案 0 :(得分:0)

创建一个包含两个数据的新视图模型:

public class FooViewModel
{
    public List<Product> Products { get; set; }
    public Reading LatestReading { get; set; }
}

更改您的视图以使用新模型:

@model FooViewModel

然后将它们发送回控制器:

var model = new FooViewModel();
model.Products = db.Products.ToList().Where(product => product.CustomerID == Customer);
model.LatestReading =  db.Readings.OrderByDescending(m => m.Id).Where(s => s.SerialNumber == SerialNumber).Select(m => m.ReadingValue).FirstOrDefault();

return View(model);

答案 1 :(得分:0)

因为Reading课程中有Products属性,您可以在视图中获取最新的ReadingValue:

foreach(Product product in Model)
{
    var latestReadingValue = product.Reading.OrderByDescendin(m => m.Id).FirstOrDefault();
    // do what you want here 
}

但正如hutchonoid所指出的更好的选择是为它创建一个ViewModel,因为在视图中使用逻辑是一种不好的做法,并且它与MVC模式不对应。