Как использовать linq для управления уровнем запасов в C # - PullRequest
0 голосов
/ 01 мая 2019

Я хочу управлять уровнем запаса (чтобы уменьшить доступность количества продукта) в базе данных после совершения покупок. и предупредить пользователя, когда количество меньше 2. или иметь поле ввода только для чтения, чтобы показать количество, доступное для каждого продукта. Мой Datacontext включает продукты, продажи, клиентов, категории и SalesDetails

В saleButton я добавляю каждый продукт в список, затем умножаю сумму на количество и цену, затем получаю сумму цены продукта, добавленной в список. у которого есть идентификатор для каждого списка покупок

Затем в кнопке отправки продаж я хочу, чтобы она обработала платеж, захватила список и сохранила в БД: , затем вычтите количество каждого товара из запаса. В этом проблема. Я пытаюсь получить уровень запасов и общий продукт, используя LINQ, но я получаю ошибки. Как изменить уровень запасов после обработки платежа?

Спасибо

Это «добавить товар» в список товаров клиента

    private void SalesButton_Click(object sender, RoutedEventArgs e)
        {
            SaleId += 1;
            var newDate = date.ToString("F");

            if (AddSalesProductNameComboBox.Text != "" && AddSalesCustomerNameComboBox.Text != "" && 
                ProductSalesPrice.Text != "" && ProductQuantityBought.Text != "")
            {

                var sale = new Sale
                {
                    SalesID = SaleId,
                    ProductName = AddSalesProductNameComboBox.Text,
                    CustomerName = AddSalesCustomerNameComboBox.Text,
                    ProductPrice = Convert.ToDecimal(ProductSalesPrice.Text),
                    QuantityPurchased = Convert.ToInt32(ProductQuantityBought.Text),
                    Date =   DateTime.Parse(newDate), 
                    Total = Convert.ToDecimal(ProductSalesPrice.Text) * Convert.ToInt32(ProductQuantityBought.Text)

                };

                posManager.AddSales(sale);

                var NewAmount = posManager.Sales.Sum(c => c.Total);
                AmountDueDisplay.Text = NewAmount.ToString();
            }
        }

Это отправка продаж в БД и обработка уровня запаса

 private void SubmitSalesButton_Click(object sender, RoutedEventArgs e)
        {

            decimal Balance = 0;
            //Check if inputs are empty
            if (AmountPaidInput.Text != "" && AmountDueDisplay.Text != "")
            {
                //Calculating the Amount due and amouunt paid
                decimal AmtDue = Convert.ToDecimal(AmountDueDisplay.Text);
                decimal AmtPaid = Convert.ToDecimal(AmountPaidInput.Text);
                DisplayBalance.Text = (AmtDue - AmtPaid).ToString();
            }

            //pass the calculated balance to the balance variable  
            Balance = Convert.ToDecimal(DisplayBalance.Text);

            //SaleDetailsID += 1;
            var newSalesDate = date.ToString("F");


            var salesDetails = new SalesDetail
            {
                SalesDetailsID = SaleDetailsID,
                SalesID = SaleId,
                SalesDetailsCustomerName = AddSalesCustomerNameComboBox.Text,
                SalesProductName = AddSalesProductNameComboBox.Text,
                AmountPaid = Convert.ToDecimal(AmountPaidInput.Text),
                Balance = Balance,
                Total = TotalQtyPurchased,
                SalesDetailsDate = Convert.ToDateTime(newSalesDate),
                //QuantityPuchased = Convert.ToInt32(ProductQuantityBought.Text)
                //QuantityPuchased = quan
                //SalesDetailsDate = 

            };

            posDBcontext.GetSalesDetails.Add(salesDetails);
            posDBcontext.SaveChanges();


            var q = SubmitSalesButton.Content as Product;
            var s = posDBcontext.Sales.Where(a => a.QuantityPurchased == q.QuantityAvailableInStock);


            AmountPaidInput.Clear();
            AmountDueDisplay.Clear();


            SalesDatagrid.ItemsSource = null;
            SalesDatagrid.Items.Clear();



            //var s = posDBContext.GetSalesDetails.Where(c => c.SalesID == c.SalesID);
            //var DetailSales = posManager.Sales.Where(c=> c.)

            //posManager.CreateSales(s);



            //TotalQtyPurchased = posDBContext.Sales.Sum(c => c.QuantityPurchased);
            //posDBContext.Products.

        }

Я пытался сделать это

var TotalQtyBought = posDBcontext.Sales.Where(c => c.Total == c.Total); 
var StockLevel = posDBcontext.Products.Where(c => c.ProductPrice == c.ProductPrice); 

foreach (var item in StockLevel) { var newStock = item - TotalQtyBought; } 

Я получил эту ошибку

But I got this error cannot apply operands to type Product and iQueryable<sale> ```

1 Ответ

0 голосов
/ 02 мая 2019

Ваш пример, касающийся EF, не имеет никакого смысла, поэтому я бы рекомендовал ознакомиться с основами использования EF и узнать, как: читать сущности, обновлять сущности и вставлять сущности.

Думайте о сущностях и запросах EF как о работе с таблицами и SQL.

Если вы хотите найти продукт и обновить его:

// -- SQL --
UPDATE Product SET Quantity = Quantity - 1 WHERE ProductId = 101;

// -- EF --
var product = context.Products.Single(x => x.ProductId == 101);
product.Quantity -= 1;
context.SaveChanges();

Если вы хотите вставить новую запись продажи.

// -- SQL --
INSERT INTO Sales (ProductId, Total) 
SELECT ProductId, Price FROM Products WHERE ProductId = 101;

// -- EF --
var product = context.Products.Single(x => x.ProductId == 101);
var sale = new Sale { Product = product, Total = product.Price };
context.Sales.Add(sale);
context.SaveChanges();

Поэтому ответить на ваш вопрос будет сложно, пока вы не поймете основы того, как EF выбирает данные, (Where, Single, ToList и т. Д.), Как сущности связывают данные друг с другом, и как вы поступаете вставка или обновление сущностей для создания и обновления связанных таблиц данных. Как только вы поймете суть этого, вы должны продвинуться немного дальше и быть в состоянии перефразировать ваш вопрос с лучшим примером того, что вы пытались и чего хотите достичь.

...