Невозможно создать постоянное значение типа 'System.Object' в Entity Framework - PullRequest
20 голосов
/ 19 июля 2011

У меня есть таблица с именем UserTenders, имеющая отношение многие-к-одному с aspnet_Membership таблицей.
Я использую EntityFramework 4.0, и когда я пытаюсь что-то подобное, она выдает ошибки.

var tenders = ctx.UserTenders
    .Where(tender => tender.HasAdminApproved.Equals(true))
    .ToList();

Ошибка:

System.NotSupportedException
Невозможно создать постоянное значение типа 'System.Object'.
Только примитивные типы (', такие как Int32, String и Guid') поддерживаются в этом контексте.

Этот фрагмент кода ниже работает.

var tenders = ctx.UserTenders.ToList();

Что может быть не так в моем коде?Чувствую, что мне не хватает чего-то очень тривиального

Я хотел бы отфильтровать все строки, которые имеют поле bit HasAdminApproved как true

Ответы [ 4 ]

31 голосов
/ 19 июля 2011

Попробуйте заменить

.Where(tender => tender.HasAdminApproved.Equals(true))

на:

.Where(tender => tender.HasAdminApproved == true)

Или, как ранее предложено @Ladislav Mrnka, если ваше поле bool?

.Where(tender => tender.HasAdminApproved)
20 голосов
/ 19 июля 2011

@ Ладислав сказал вам правильный ответ (.Where(tender => tender.HasAdminApproved)), но вы можете спросить, почему вы получаете это сообщение.

Вы пытаетесь позвонить System.Boolean.Equals(Object obj). Таким образом, вы бокс постоянная true. И L2E, как говорится в сообщении, не поддерживает const непримитивного типа, такого как System.Object. Отсюда и ошибка.

6 голосов
/ 02 октября 2014

У меня было то же исключение, вызванное другой проблемой: символ против строки, используемой в качестве константы.Моя выборка выглядела так:

from p in Person
select new Foo
{
  FullName = p.FirstName + ' ' + p.LastName
}

Булевы условия, которые у меня были где-то в запросе (т. Е. «Где p.IsActive»), работали нормально.Мне пришлось переключиться на использование строки:

from p in Person
select new Foo
{
  FullName = p.FirstName + " " + p.LastName
}

Это, очевидно, не ответ на вопрос ОП, но я не смог найти аналогичный вопрос с проблемой char / string, поэтому я хотел опубликовать егодля пользы других.

2 голосов
/ 13 мая 2015

Просто хотел бы отметить, вы могли бы также использовать tender.HasAdminApproved.HasValue.Equals (true)) ... это работает, когда bool допускает нулевые значения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...