neitoo
@neitoo

Как реализовать вывод товаров из List у которых закончился срок годности?

Есть список товаров, для примера
List<Product> tovar = new List<Product>()
            {
                new Product(){id = 2,name = "Яблоки",dataproizv = "11.11.2021",cpisanie = "Свежие яблоки.",cena = 100,skidka = 5, kategorya = "Овощи"}
                new Product(){id = 2,name = "Молоко",dataproizv = "16.10.2021",cpisanie = "Свежее молоко.",cena = 80,skidka = 10, kategorya = "Кисломолочные"}
            };


Необходимо вывести товары у которых закончился срок годности (кисломолочным дано 3 месяца на хранение)
Я думал сделать через метод, но как в него передать значение из списка или весь список не понимаю.. (Если требуется скину метод)
Либо сделать перебор списка с условием, например:
for (int i = 0; i < tovar.Count; i++)
            {
                //Тут написать условие
                Console.WriteLine("ID " + tovar[i].id + ": \"" + tovar[i].name + "\"" +" | Категория: "+ tovar[i].kategorya + " | Дата производства: " + tovar[i].dataproizv + " | " + tovar[i].cena + " RUB | Скидка " + tovar[i].skidka + " %  " + "\nОписание товара: " + tovar[i].cpisanie);
            }


но опять же даты у меня хранятся в строках...
Может есть другие решения, или подскажите что сделать с данными вариантами?
  • Вопрос задан
  • 145 просмотров
Решения вопроса 1
firedragon
@firedragon
Senior .NET developer
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;

namespace ConsoleApp2
{
    /// <summary>
    /// Не используйте транслит! Любой китаец или индус поймет английский, 
    /// а вот русский только поржет. 
    /// </summary>
    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string ImportDate { get; set; }
        public string Description { get; set; }
        /// <summary>
        /// Рубли умноженные на 10000. помним об этом то есть у вас копейка имеет 2знака после запятой!!!!
        /// </summary>
        public Int64 Price { get; set; }
        public int Discount { get; set; }
        public string Category { get; set; }
        /// <summary>
        /// Дата списания
        /// </summary>
        public string DueDate { get; set; }
        public string ДляОсобоУпоротыхЭтоТакиРаботает { get; set; }
    }
    public static class Extensions
    {
        /// <summary>
        /// Convert string from format dd.MM.yyyy to DateTime
        /// </summary>
        /// <param name="inputDate"></param>
        /// <returns></returns>
        public static DateTime ParseDateDayMounthYear(this string inputDate) =>
            DateTime.ParseExact(inputDate, "dd.MM.yyyy", CultureInfo.InvariantCulture);
    }
    class Program
    {
        static void Main(string[] args)
        {
            #region заполняем список товаров
            List<Product> tovar = new List<Product>()
            {
                new Product(){Id = 2,
                    Name = "Яблоки",
                    ImportDate = "11.11.2022",
                    Description = "Свежие яблоки.",
                    Price = 1000000,
                    Discount = 5, 
                    DueDate="11.11.2022",
                    Category = "Овощи"},
                new Product(){Id = 2,Name = "Молоко",
                    ImportDate = "16.10.2021",
                    DueDate="16.10.2021",
                    Description = "Свежее молоко.",
                    Price = 800000,
                    Discount = 10, 
                    Category = "Кисломолочные"}
            };
            #endregion

            // число месяц год
            var data =  tovar.Where(item => item.DueDate.ParseDateDayMounthYear() < DateTime.Today).ToList();
        }
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@werwolflg
Сделайте дату датой, и потом такую выборку
tovar.Where(item=> (item.dataproizv.AddDays(21)) < DateTime.Today );
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы