在我的表格中,我有几个DateTime
字段:
public class Order
{
public int Id { get; set; }
[Display(ResourceType = typeof(Resources), Name = "Year")]
public int Year { get; set; }
public string CustomerDesc { get; set; }
public string ProductDesc { get; set; }
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
public DateTime OrderDate { get; set; }
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
public DateTime DeliveryDate { get; set; }
public double Quantity { get; set; }
}
当用户查找某些记录时,他应该能够使用“灵活”的方式搜索它们,即对于OrderDate:
01/03/2018 //恰好这一天
01/03 //任何一年的3月1日
03/2018 // 2018年3月的任何一天
应返回OrderDate为2018年3月1日的记录,OrderDate为3月1日(任何年度)或OrderDate为2018年3月(任何一天)的所有记录。
我知道这不是一个“日期”查询 - 它看起来像一个字符串比较。 因此,我尝试了最明显的方式:
var records = from s in _context.Orders.AsNoTracking() select s;
if (!String.IsNullOrEmpty(searchOrderDate)) records = records.Where(x => x.OrderDate.ToString("dd/MM/yyyy").Contains(searchOrderDate));
但当然抱怨LINQ无法使用ToString()
方法。
丑陋的方式是在模型级别执行此操作,添加一个存储
的字段
日期的字符串版本,并对此进行搜索。
还有更好的事情吗?
在有用的评论之后,问题是关于在Contains()
字段上执行字符串比较(即DateTime
)。这是因为请求与 date 比较并不真正相关。