Как преобразовать этот LINQ в SQL, чтобы он не бомбил во время выполнения? - PullRequest
1 голос
/ 10 октября 2009
   public IQueryable<Story> FindAllStories(){
        var stories = (from s in db.Stories
                       orderby s.DateEntered descending
                       select new Story
                       {     
                            Title = s.Title,
                            UserName = s.aspnet_User.UserName
                        }
                       );

        return stories;
    }

Мне нужно передать это как IQueryable, чтобы помощник по нумерации страниц, который я нашел в Интернете, мог извлекать только те элементы, которые мне нужны Проблема в том, что во время выполнения, когда помощник пытается сделать source.Count (); компилятор не очень доволен, потому что это «явное создание запроса типа сущности».

Как бы я изменил этот метод LINQ to SQL, чтобы этого не произошло?

Кроме того, чтобы помочь мне понять это, почему предыдущий код не работает, а этот работает?

   public IQueryable<Story> FindAllStories(){
        var stories = (from s in db.Stories
                       orderby s.DateEntered descending
                       select s);

        return stories;
    }

Обновление

Я начинаю думать, что способ сделать это (проверено, что это работает) - создать POCO с именем UserStory. Новый класс имеет 2 свойства: одно типа Story, а другое - UserName. Затем я могу без проблем вернуть IQueryable из UserStory.

Это прекрасно; однако я до сих пор не понимаю, почему этот метод будет работать, а мой другой нет. Другой - добавить свойство строки UserName в мой частичный класс Story и передать этот объект между слоями. Какая разница?

1 Ответ

0 голосов
/ 10 октября 2009

Следующая ссылка на сообщение в блоге tat описывает проблему, аналогичную вашей. Похоже, что решением было вернуть тип, который унаследован от Story вместо типа Story:

http://devlicio.us/blogs/derik_whittaker/archive/2008/04/25/linq2sql-explicit-construction-of-entity-exception.aspx

Надеюсь, это поможет.

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