Непостоянное поле - PullRequest
       9

Непостоянное поле

0 голосов
/ 28 декабря 2018

У меня есть Items таблица:

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 таблица:

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?Я искал об этом и ничего не нашел.

1 Ответ

0 голосов
/ 28 декабря 2018

Поскольку с каждым Order будет связан элемент, связанный с ним через forigen ключ ItemsId и навигационное свойство Items, вы должны добавить свойство коллекции Orders к вашему объекту 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, чтобы получить оставшееся количество для каждого элемента.Я бы создал модель представления / 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>.

...