如何过滤 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"
我正在做我的考试项目,我正在努力创建一个 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"