我正在使用以下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)'方法,并且此方法无法转换为商店表达式。
这一行代码在另一个页面中正常工作。为什么会这样?
答案 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
};