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