Получить название колонки БД для показа оставшихся размеров товара

96
18 апреля 2021, 07:00

Существует модель размеров ProductSize, где есть свойства:

public int Id {get; set;}
public int S {get; set;}
public int M {get; set;}
public int L {get; set;}
public int ProductId {get;set;}
public Product Product {get; set;}

Размеры хранят в себе значение Int, которые указывают на количество в наличии того или иного размера. Хочу создать дропдаун, в котором будут только указаны размеры, в которых значение больше нуля. Ну или, как вариант, будут все значения, но Enabled\Disabled по этой же логике. Но для этого мне все равно нужно получить названия колонок, в которых ненулевые значения. Как правильно будет это сделать?

Сначала вместо int хранил bool и написал этот ужасный метод (но по итогу даже не попробовал, потому что решил переделать всю БД сначала)

var product = db.Products.FirstOrDefault(p => p.Id == productId);
var availableSizes = from s in db.ProductSizes where (s.Id == productId) select s;
List<string> Sizes = new List<string>();
foreach (var s in availableSizes)
{
    if(s.S == true)
    {
        Sizes.Add("S");
    }
    if(s.M == true)
    {
        Sizes.Add("M");
    }
    if (s.L == true)
    {
        Sizes.Add("L");
    }
    if (s.Xl == true)
    {
        Sizes.Add("XL");
    }
    if (s.Xxl == true)
    {
        Sizes.Add("XXL");
    }
}
return Sizes;
Answer 1

Есть два варианта. Полноценный - это создавать хорошую структуру для товаров, складских остатков, проданного и списанного товара.

Но в принципе, если вы не планируете двигаться в эту сторону - то посмотрите в сторону более простой модели.

У вас отдельно должны быть размеры:

public class ProductSize
{
   public int Id { get; set; }
   public int Title { get; set; }
}

И отдельно их наличие:

public class Store
{
   public int Id { get; set; }
   public int ProductId {get;set;}
   public Product Product {get; set;}
   public int ProductSizeId {get;set;}
   public ProductSize ProductSize {get; set;}
   public int Count {get; set;}
}

В котором заполняйте количество товаров того или иного размера отдельными строками. Запросы будут гораздо проще, тут их два варианта: либо вы один продуктов+размер может иметь только одну строку в таблице, либо несколько, нужно предварительно просуммировать.

Уверен: вы очень быстро найдёте для себя много идей как пойти к полноценной складской системе :)

READ ALSO
Куда спрятать функцию C#?

Куда спрятать функцию C#?

Есть функция которая проверяет привязку по железу, нужно её спрятать что бы при реверсе было сложнее отыскатьНужно что бы она выполнялась...

115
Подкачка файлов из интернета

Подкачка файлов из интернета

И так, мне нужно приложение WPF которое умеет скачивать определённый набор файлов с сервера, а так-же сверять все файлы которые есть на сервере...

113
При уникальном имени, не бросать исключение DuplicateEntry, а взять уже существующий

При уникальном имени, не бросать исключение DuplicateEntry, а взять уже существующий

Можно ли при добавлении объекта, без дополнительного поиска вставить индекс на существующий объект, если его имя должно быть уникальным?

109
Отсечение лишних кортежей

Отсечение лишних кортежей

Всем привет, есть вот такая выборка из БД

125