У меня проблема с вычитанием двух дат в базе данных MySQL и сравнением их с целыми числами. Я пытался использовать dbfunctions.diffdays, однако это конфликт типов.
При запуске приложения получаю сообщение:
System.ArgumentException: 'DbArithmeticExpression arguments must have a numeric common type.'
Ниже мой код я
int intervalDay = 25;
var dateCount = (from Rezerwacje in db.Rezerwacje
join rooms in db.rooms on Rezerwacje.PokojID equals rooms.id
where (rooms.floor > 0 && rooms.floor <= 2) &&(Rezerwacje.DataDo == dateTime) && ((Rezerwacje.DataDo - Rezerwacje.DataOd).Days > intervalDay)
select Rezerwacje).Count();
return dateCount;
f Я использую Ваш код, у меня есть сообщение: System.Data.Entity.Core.EntityCommandExecutionException: 'Произошла ошибка при выполнении определения команды. Подробности смотрите во внутреннем исключении». MySqlException: FUNCTION DatabaseName.DiffDays не существует





Вы могли бы использовать
System.Data.Objects.EntityFucntions
и в коде:
where ... &&
EntityFunctions.DiffDays(Rezerwacje.DataDo, Rezerwacje.DataOd) > intervalDay
Если я использую Ваш код, у меня появляется сообщение: System.Data.Entity.Core.EntityCommandExecutionException: 'Произошла ошибка при выполнении определения команды. Подробности смотрите во внутреннем исключении». MySqlException: FUNCTION DatabaseName.DiffDays не существует
Это связано с тем, что EntityFunctions предоставляет методы Entities Linq 2, а не linq 2 sql. Вместо этого используйте DbFunctions.DiffDays.
using System.Data.Entity;
//code in LINQ
... DbFunctions.DiffDays(Rezerwacje.DataDo, Rezerwacje.DataOd) >= intervalDay
В конечном итоге я использую List и foreach.
Загрузка данных из базы данных:
public int DateCleanFloor1to2(DateTime dateTime)
{
var dateList = (from Rezerwacje in db.Rezerwacje
join rooms in db.rooms on Rezerwacje.PokojID equals rooms.id
where (rooms.floor > 0 && rooms.floor <= 2) && (Rezerwacje.DataDo == dateTime)
select Rezerwacje).ToList();
return SubtractDateToDateFrom(dateList, dateTime.AddDays(25));
}
И метод с циклом foreach:
public int SubtractDateToDateFrom(List<Rezerwacje> dateList, DateTime dateTime)
{
int count = 0;
foreach (var item in dateList)
{
if (item.DataDo < dateTime)
{
count++;
}
}
return count;
}
@DevilSuichiro @Арулкумар @Seven
Это может быть то, что вам нужно: stackoverflow.com/questions/9820401/…