返回Count()天到期日

时间:2016-11-01 17:05:09

标签: c# linq

我想返回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;
}

3 个答案:

答案 0 :(得分:2)

System.Data.Entity.DbFunctionsMSDN)有一个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();