Как отфильтровать строку DateTime, без команд sqlserver - PullRequest
1 голос
/ 05 апреля 2019

Я работаю над своим экзаменационным проектом и пытаюсь создать метод, который возвращает отфильтрованный список заказов. Я пытаюсь отфильтровать функцию по DateTime, которую я ранее сохранил в базе данных с первым вариантом кода и после фильтрации, чтобы вызвать метод в сетке WindowsForm.

Я пробовал несколько способов, которые я видел в интернете, но ничего не получалось

    public IQueryable<Order> GetOrderFiltered(IQueryable<Order> OrdersQuery, Order order)
        {

            if (!string.IsNullOrWhiteSpace(order.Time))
            {
                OrdersQuery = OrdersQuery.Where(p => p.Time.Contains(DateTime.Today.ToString("dd/MM/yyyy HH:mm")));
            }

            var list = new List<Order>(OrdersQuery);
            return list;
        }
    }
namespace Data.Model
{
    public class Order
    {
        [Key]
        public int Id { get; set; }
        public string Name { get; set; }
        public string Product { get; set; }
        public string PhoneNumber { get; set; }
        public string Location { get; set; }
        public DateTime Time { get; set; }
    }
}

Я был бы очень благодарен, если бы кто-нибудь мог мне помочь.

Ответы [ 2 ]

0 голосов
/ 05 апреля 2019

Я не могу точно знать, как именно вы хотите, чтобы он был отфильтрован, но в основном вы можете сделать следующее, если хотите получить список ордеров, время которых равно заданному ордеру.

public IQueryable<Order> GetOrderFiltered(IQueryable<Order> OrdersQuery, Order order)
{
    return OrdersQuery.Where(x => x.Time == order.Time);
}

Вот пример класса, который я написал, чтобы проверить это:

class Program
{
    public class Order
    {
        public Order(int id, string time)
        {
            this.Id = id;
            this.Time = time;
        }

        public int Id { get; set; }
        public string Time { get; set; }
    }

    static void Main(string[] args)
    {
        List<Order> list = new List<Order>();
        list.Add(new Order(0, "1"));
        list.Add(new Order(1, "2"));
        list.Add(new Order(2, "1"));
        list.Add(new Order(3, "2"));
        list.Add(new Order(4, "1"));


        IQueryable<Order> test = GetOrderFiltered(list.AsQueryable(), new Order(121, "1"));
        // test has orders 0,2,4
    }

    public static IQueryable<Order> GetOrderFiltered(IQueryable<Order> OrdersQuery, Order order)
    {
        return OrdersQuery.Where(x => x.Time == order.Time);
    }
}

Edit. Прочитав ваш новый комментарий, вы ищете следующую функцию:

public IQueryable<Order> GetOrderFiltered(IQueryable<Order> OrdersQuery, Order order)
{
    return OrdersQuery.Where(x => x.Time == DateTime.Today.ToString("dd/MM/yyyy"));
}

Только в том случае, если ваше Время выглядит так - "01/02/2005", конечно.

Вы можете играть со своей собственностью Time, как хотите, это зависит от вас. Если у вас есть минуты и секунды после дд / мм / гггг, в соответствии с вашим кодом, то вы можете использовать:

return OrdersQuery.Where(x => x.Time.StartsWith(DateTime.Today.ToString("dd/MM/yyyy")));

или "Содержит" вместо "StartsWith"

0 голосов
/ 05 апреля 2019
public IQueryable<Order> GetTodayOrders(IQueryable<Order> OrdersQuery)
{
    return OrdersQuery.Where(o => o.Time >= DateTime.Today && o.Time < DateTime.Today.AddDays(1));
}

Order order параметр выглядел бесполезным (так как вы хотите только заказы с сегодняшнего дня): я удалил его.

Я переименовал метод, чтобы лучше выразить намерение.

Я предположил, что, поскольку тип возвращаемого значения по-прежнему IQueryable, он предназначен для непосредственного возврата без какой-либо промежуточной структуры (List).

Условие where позволяет покрывать заказы со временем с сегодняшнего дня в 00:00:00 до 23: 59: 59.

...