LINQ灵活的数据过滤器

时间:2018-03-11 09:23:52

标签: asp.net-mvc linq

在我的表格中,我有几个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 比较并不真正相关。

0 个答案:

没有答案