#asp.net-mvc
#asp.net-mvc
Вопрос:
Мне нужно получить количество дней между двумя датами из базы данных с помощью запроса Linq, пожалуйста, помогите мне, как это сделать. Спасибо
Я попробовал приведенный ниже код, но он вернул мне результат nul! пожалуйста, помогите
DateTime rightNow = DateTime.Now;
//int totalDays = (from d in db.vuExpiredProjectsAssigned
// where d.AssignedTo==obj.DepartmentID
// select (d.AssignedDate - d.DueDate).Days).FirstOrDefault();
//var numberdays = (from pd in db.vuExpiredProjectsAssigned
// where pd.AssignedTo == obj.DepartmentID
// select SqlFunctions.DateDiff("day", pd.AssignedDate, rightNow));
var result =(from dd in db.vuExpiredProjectsAssigned
where dd.AssignedTo==obj.DepartmentID
select new
{
days=SqlFunctions.DateDiff("Day",dd.DueDate,rightNow)
});
ViewBag.ndays = resu<
Комментарии:
1.
var days = (DueDate - AssigneDate).Days;
2. ошибка заключается в том, что «Аргументы DbArithmeticExpression должны иметь числовой общий тип».
3. Сначала выполните запрос
4. проверьте мой обновленный код
5. ваша проблема решена?
Ответ №1:
Арифметика с DateTime не поддерживается в Entity Framework. Вы должны использовать DbFunctions *. Итак, для первой части вашего заявления, что-то вроде:
var numberdays = ( from p in db.vuExpiredProjectsAssigned
where p.AssignedTo == obj.DepartmentID
select DbFunctions.DiffDays(p.AssignedDate,p.DueDate));
или
var numberdays = ( from p in db.vuExpiredProjectsAssigned
where p.AssignedTo == obj.DepartmentID
select SqlFunctions.DateDiff("day", p.AssignedDate, p.DueDate));
Для получения дополнительной информации, пожалуйста, проверьте ссылки ниже.
Комментарии:
1. он возвращает ошибку » Нет перегрузки для метода ‘diffDays’ принимает 1 аргумент «??
2. что он перенастраивает? я сохраняю результат в ViewBag, он печатает мне сам запрос
3. он должен возвращать массив int. Не могли бы вы, пожалуйста, поставить точку останова и проверить это?
4. ВЫБЕРИТЕ DATEDIFF(день, [Extent1]. [Назначенная дата], [Extent1]. [DueDate]) КАК [C1] ИЗ [dbo] . [vuExpiredProjectsAssigned] КАК [Extent1], ГДЕ [Extent1]. [Назначено] = @p__linq__0
5. не могли бы вы преобразовать свой результат в список
Ответ №2:
попробуйте с этим
DbFunctions.DiffDays(dd.DueDate,rightNow).Value
Обновить
var rightNow= DateTime.Today.ToShortDateString();
public class democlass
{
public int count {get; set;}
}
и запрос, подобный этому
var result =(from dd in db.vuExpiredProjectsAssigned
where dd.AssignedTo==obj.DepartmentID
select new democlass()
{
count = DbFunctions.DiffDays(dd.DueDate,rightNow).Value
});
затем проверьте свою переменную результата.
Комментарии:
1. var result = (из dd в db.vuExpiredProjectsAssigned где dd. Присваивается == obj. DepartmentID выберите DbFunctions. DiffDays(dd.AssignedDate, dd.DueDate). Значение); ViewBag.ndays = результат;
2. тем не менее, возвращаемый результат равен нулю
3. дни — это анонимное поле?
4. у меня есть дата, хранящаяся в базе данных в коротком формате. пример. 2016-1-1,
5. я сделал, но все равно результат: null
Ответ №3:
Пока вы не используете разницу в днях в where classuse, тогда лучше выполнить это вычисление в вашем коде вместо добавления накладных расходов в SQL, поэтому измените свой код на:
public class democlass
{
public DateTime DueDate{get;set;}
public int count {get; set;}
}
var result =((from dd in db.vuExpiredProjectsAssigned
where dd.AssignedTo==obj.DepartmentID
select new democlass()
{
DueDate= dd.DueDate;
})).ToList();
result.ForEach(a=> {a.count = a.DueDate.Subtract(DateTime.Now).TotalDays});