在 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
};
我正在使用以下 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
};