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

Get formatted date in string format in LINQ to Entities

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

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是table中可以为空的datetime字段。当我 运行 此代码时出现此错误:

LINQ to Entities does not recognize the method 'System.String ToString(System.String)' method, and this method cannot be translated into a store expression.

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

发生这种情况是因为 LINQ 表达式是在服务器端计算的,即在 SQL 服务器内部并且函数 ToString() 不可用。

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

只需在Where()后添加ToList()ToArray()方法即可。这会将过滤后的对象提取到您的内存中,您将能够调用 ToString()。请确保在 过滤后调用 ToList() 以避免从 table.

中获取所有记录
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
   };