在LINQ to Entities中以字符串格式获取格式化日期

时间:2015-01-23 08:18:08

标签: c# entity-framework linq-to-entities

我正在使用以下LINQ to Entities代码从名为Stocks的数据库表中获取数据:

IEnumerable<DrugInfoViewModel> Info = from a in db.Stocks.Where(
   r => r.SiteID == SiteID 
        && r.MachineID == MachineID 
        && EntityFunctions.TruncateTime(r.ExpiryDate) <= ExpiryDate)
   select new DrugInfoViewModel()
   {
        ItemName = a.DrugBrand.Name,                           
        ItemBatchNo = a.BatchNo,
        ItemExpiryDate = (a.ExpiryDate == null ? null :
          Convert.ToDateTime(a.ExpiryDate).ToString("MM/dd/yyyy")),
                       Quantity = (int?)a.Qty
   };

此处,ItemExpiryDate是字符串字段,a.ExpiryDate是表格中可为空的datetime字段。当我运行此代码时,我收到此错误:

  

LINQ to Entities无法识别方法'System.String ToString(System.String)'方法,并且此方法无法转换为商店表达式。

这一行代码在另一个页面中正常工作。为什么会这样?

2 个答案:

答案 0 :(得分:0)

这是因为LINQ表达式是在服务器端评估的,即在SQL Server内部,并且函数ToString()不可用。

正如已在评论中所建议:在客户端获取DateTime格式。

答案 1 :(得分:0)

只需在ToList()之后添加ToArray()Where()方法即可。这会将过滤后的对象提取到您的内存中,您可以调用ToString()。请确保在过滤后致电ToList() ,以避免从表中提取所有记录。

IEnumerable<DrugInfoViewModel> Info = from a in db.Stocks.Where(
   r => r.SiteID == SiteID 
        && r.MachineID == MachineID 
        && EntityFunctions.TruncateTime(r.ExpiryDate) <= ExpiryDate)
   .ToList()
   select new DrugInfoViewModel()
   {
        ItemName = a.DrugBrand.Name,                           
        ItemBatchNo = a.BatchNo,
        ItemExpiryDate = (a.ExpiryDate == null ? null :
          Convert.ToDateTime(a.ExpiryDate).ToString("MM/dd/yyyy")),
                       Quantity = (int?)a.Qty
   };