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

问题描述 投票:1回答:2

我正在研究我的考试项目,我正在努力创建一个返回已过滤的订单列表的方法。我正在尝试过滤之前使用代码第一个变体保存在数据库中的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; }
    }
}

如果有人能帮助我,我将非常感激。

c# string datetime filtering iqueryable
2个回答
0
投票

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

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

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

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属性,这取决于您。如果它有dd / mm / yyyy后的分钟和秒,根据您的相关代码,那么您可以使用:

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

或“包含”而不是“StartsWith”


0
投票
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覆盖时间顺序。

© www.soinside.com 2019 - 2024. All rights reserved.