如何过滤 DateTime 字符串,到 sql server 命令

How to filter DateTime string, no sqlserver commands

我正在做我的考试项目,我正在努力创建一个 returns 过滤订单列表的方法。我正在尝试过滤我之前使用代码优先变体保存在数据库中的 by DateTime 函数,并在过滤后调用 WindowsForm gridview 中的方法。

我尝试了多种在互联网上看到的方法,但没有任何效果

    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; }
    }
}

如果有人能帮助我,我将不胜感激。

public IQueryable<Order> GetTodayOrders(IQueryable<Order> OrdersQuery)
{
    return OrdersQuery.Where(o => o.Time >= DateTime.Today && o.Time < DateTime.Today.AddDays(1));
}

Order order 参数看起来没用(因为你只想要今天的订单):我删除了它。

我重命名了方法以更好地表达意图。

我假设因为 return 类型仍然是 IQueryable 它打算直接 returns 没有任何中间结构 (List).

where 条件允许覆盖从今天 00:00:00 到 23:59:59 的订单。

我不确定您希望如何过滤它,但是如果您希望获得时间等于给定订单的订单列表,基本上可以执行以下操作。

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

这是一个示例 class 我写信来检查它:

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);
    }
}

编辑。 阅读您的新评论后,您正在寻找的功能是:

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

只有在您的时间看起来像这样的情况下 - 当然是“01/02/2005”。

你可以随心所欲地玩你的时间 属性,这取决于你。如果它在 dd/mm/yyyy 之后有分秒,根据您的代码,您可以使用:

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

或 "Contains" 而不是 "StartsWith"