非持久性字段

Non-Persistence Field

我有 Items table :

Id Code   Quantity
1  Cake01 10
2  Cake02 15
3  Cake03 20

public class Items
{
    public int Id { get; set; }
    public string Code { get; set; }
    public int Quantity { get; set; }
}

Orders table :

Id ItemsId Quantity
1  1       5
2  1       3
3  2       10
4  3       2
5  3       5
6  1       2

public class Orders
{
    public int Id { get; set; }
    public int ItemsId { get; set; }
    public virtual Items Items { get; set; }
    public int Quantity { get; set; }
}

如何在 MVC 5 中获取剩余数量?通常,我只是像这样创建视图:

select a.Id, a.Quantity-(isnull(b.Quantity,0)) as Remaining 
from Items a left join
(select ItemsId as Id, sum(Quantity) as Quantity group by ItemsId) as b
on a.Id = b.Id

结果:

Id Remaining
1  1
2  5
3  10

是否可以在 MVC 5 中创建非持久性字段?我一直在搜索这个,但一无所获。

由于每个 Order 都会有一个通过 ItemsId forigen 键和 Items 导航 属性 关联的项目,您应该添加订单集合 属性 到您的 Items 实体。

public class Items
{
    public int Id { get; set; }
    public string Code { get; set; }
    public int Quantity { get; set; }

    public ICollection<Orders> Orders { set; get; }
}

现在可以使用 LINQ 查询来获取每个项目的剩余数量。我会创建一个视图 model/DTO 来表示这些数据。

public class ProductVm
{
    public int Id { set; get; }
    public string Code { set; get; }
    public int RemainingQuantity { set; get; }
}

现在在您的 LINQ 查询中,获取项目,从每个项目的订单集合中获取数量总和,然后从数量 属性 值中减去该总和。

var products = db.Items
                 .Select(p => new ProductVm
                               {
                                  Id = p.Id,
                                  Code = p.Code,
                                  RemainingQuantity = p.Quantity - p.Orders
                                                                    .Sum(n => n.Quantity)
                               }).ToList();

此处 products 的类型将是 List<ProductVm>