我想返回count()警告天数到期的项目小于或等于(ExpireDate - Datetime.Now),我在c#中使用linq到sql。 我收到这个错误:
方法' Int32 getDifference(System.DateTime)'没有受支持的SQL翻译。
任何帮助将不胜感激。 这是我的代码:
public static int getAlertDays()
{
using (var db = new AWarehouseDataClassesDataContext())
{
var count = (from i in db.tblItems
where (getDifference(i.ExpireDate) <= i.AlertDays)
select i).Count();
return count;
}
}
private static int getDifference(DateTime expireDate)
{
return (expireDate - DateTime.Now).Days;
}
答案 0 :(得分:2)
System.Data.Entity.DbFunctions
(MSDN)有一个DiffDays
函数:
// Add this to your using
using System.Data.Entity;
// Back to your example
var count = db.tblItems.Count(i =>
DbFunctions.DiffDays(i.ExpireDate, DateTime.Now) <= i.AlertDays);
请注意,我还更改为使用带有lambda的Count
版本,我发现它比尝试使用Where
(或等效where
)更具可读性
答案 1 :(得分:1)
您可以使用DbFunctions.DiffDays
:
var count = (from i in db.tblItems
where DbFunctions.DiffDays(i.ExpireDate, DateTime.Now) <= i.AlertDays
select i).Count();
return count;
答案 2 :(得分:1)
该消息表明SQL中不支持您的方法getDifference
,即SQL中没有具有该名称的方法。我相信你所需要做的就是将该函数内联到声明中以使其工作,即
var count = (from i in db.tblItems
where ((i.ExpireDate - DateTime.Now).Days <= i.AlertDays)
select i).Count();