У меня возникла проблема, и я не понимаю ее. Так что у меня есть эта SqlQuerrySqlQuerry ToList() работает, но Linq (Iqueryable) нет?
var blogs = context.Meal.SqlQuery("SELECT * FROM dbo.Meal WHERE PersonID=" + id.ToString() + "AND DATEDIFF(day,GETDATE(),Datetime) <= 7 ").ToList();
И это прекрасно работает, но я попытался передать это выражение LINQ, и я не могу получить ToList() для работы
var blogs1 = from c in context.Meal
where c.PersonID.Equals(id)
where (DateTime.Now.Date - c.Datetime).Days <= 7
select c;
List<Meal> blogs = blogs1.ToList();
Я получаю эту ошибку:
An unhandled exception of type 'System.ArgumentException' occurred in EntityFramework.SqlServer.dll
Additional information: DbComparisonExpression requires arguments with comparable types.
Я гугл много, пытался сначала вар блог, а затем попытался с ToList<Meal>
пытался DateTime.Now
, но я скопировал выражение из сети, а затем из-за отложенное исполнение я написал
var blogs = (from c in context.Meal
where c.PersonID.Equals(id)
where (DateTime.Now.Date - c.Datetime).Days <= 7
select c).ToList();
Но нет, он не будет работать:/ Я использую System.Linq, и я прочитал здесь, на StackOverflow, что Linq поддерживает IQueryable ToList. Возможно ли, что мой Linq ошибочен, он выглядит просто, и я получил его из сети, чтобы он не ошибся?
Если вам нужно больше информации в комментариях, я добавлю его. Благодаря!
EDIT1: Изменено. Общее время суток. Как указано в @garethb, но ошибка сохраняется. EDIT2: Я попытался это, как Матиас предложил
var now = DateTime.Now.Date;
var blogs1 = from c in context.Meal
where c.PersonID.Equals(id)
where EntityFunctions.DiffDays(now, c.Datetime) <= 7
select c;
List<Meal> blogs = blogs1.ToList();
И получил эту ошибку: (то же самое с SqlFunctions)
An unhandled exception of type 'System.NotSupportedException' occurred in EntityFramework.SqlServer.dll
Additional information: LINQ to Entities does not recognize the method 'System.Nullable`1[System.Int32] DiffDays(System.Nullable`1[System.DateTime], System.Nullable`1[System.DateTime])' method, and this method cannot be translated into a store expression.
Для отделки я случайно отмечен этот вопрос как дубликат, но это не так. Я не понял, где проблема, но главная проблема заключается в том, что Microsoft изменила пространство имен метода DiffDays от EntityFunctions до DbContext в EF 6.x, и именно поэтому мой Linq не работал. В этом примере это может быть сравнение дат, но это по-другому, поэтому оно не дублируется.
Допускает ли Meal.Datetime нулевые значения? Думаю, у тебя есть. Кроме того, каково определение «сейчас»? –
@WesleyLong Нет, это не автоматическое сгенерированное добавлением еды, без ввода пользователя. Теперь добавлено определение. Но я решил проблему. Спасибо, в любом случае! – Vulisha
или просто сравнить с 2 датами http://stackoverflow.com/questions/21000287/date-difference-logic-in-linq – Slai