Как посчитать список не примитивных объектов в Entity Framework? - PullRequest
1 голос
/ 25 октября 2011

Мне нужно подсчитать, сколько объектов существует, и затем сохранить это число.

Я попытался сделать следующее:

var order = db.Questions.Where(x => x.Owner == owner).Count();

, что приводит к ошибке со следующим сообщением:

Невозможно создать постоянное значение типа 'MVCApp.Models.Owner'.В этом контексте поддерживаются только примитивные типы (такие как Int32, String и Guid).

Я изменил код следующим образом:

var order = db.Questions.Where(x => x.Owner == owner);
int bla = 0;
foreach (var item in order)
{
    bla++;
}

Что япохоже, что он работает нормально, без недостатков (кроме необходимости в нескольких дополнительных строках кода), но я бы очень хотел понять эту проблему и проблему, стоящую за ней.

Команда WhereПриведение объектов в порядок, так почему же Count не работает?

Кто-нибудь может что-нибудь предложить?

Ответы [ 2 ]

4 голосов
/ 25 октября 2011

Я подозреваю, что owner - это экземпляр класса, другой сущности, возможно?В этом случае вы, вероятно, захотите проверить, что внешний ключ совпадает с идентификатором владельца (или наоборот, в зависимости от того, как установлены отношения).Если это так, то причина, по которой он не работал раньше, заключается в том, что он не знает, как преобразовать равенство объектов в выражение SQL.Он должен работать с примитивными типами, для которых определен перевод выражения.

var count = db.Questions.Where( x => x.OwnerID == owner.ID ).Count();
1 голос
/ 25 октября 2011

Вместо того, чтобы зацикливаться, я считаю, что вы должны быть в состоянии сделать это:

var bla = db.Questions.Where(x => x.Owner == owner).AsEnumerable().Count();

Я не знаю, почему вы не смогли бы получить Count() предметов, используя EF, но возвращаяиспользовать LINQ to Objects здесь должно работать нормально.

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