2016-11-01 2 views
0

Я хочу вернуть count() элементы, в которых дни предупреждения для истечения срока действия меньше или равно (ExpireDate - Datetime.Now), я использую linq для sql в C#. я получаю эту ошибку:Количество возвратов() дней до истечения срока действия

Method 'Int32 getDifference(System.DateTime)' has no supported translation to 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

Просто замените вызов 'getDifference' тем, что строка кода в вашем Linq. Проблема в том, что он пытается преобразовать это в SQL и не знает, как перевести ваш метод. – juharr

ответ

1

Сообщение о том, что ваш метод getDifference не поддерживается в SQL т.е. нет способа в SQL, который имеет это имя. Я считаю, что все, что вам нужно сделать, это рядный, что функция в заявлении для его работы т.е.

var count = (from i in db.tblItems 
      where ((i.ExpireDate - DateTime.Now).Days <= i.AlertDays) 
      select i).Count(); 
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

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); 

Обратите внимание, что я изменил в использовании версия Count, которая берет лямбда, я считаю ее более читаемой, чем пытаться использовать Where (или, что то же самое, where)

+0

Я получаю эту ошибку: имя «DbFunctions» не существует в текущем контексте. –

+0

@PlazzaSele: вам нужно добавить пространство имен для использования. – Guvante

Смежные вопросы