Возврат столбца из связанной таблицы в LINQ to SQL - PullRequest
1 голос
/ 10 октября 2009

Моя проблема в том, что я пытаюсь вернуть простой запрос, содержащий объект Story. У объекта Story в таблице есть UserId, который ссылается на столбец UserId aspnet_users. Я создал частичный класс для Story, который добавляет свойство UserName, поскольку оно не существует в самой таблице.

Следующий запрос получает все истории; однако, помощник по разбиению на страницы принимает запрос и возвращает только то, что необходимо, после того как он передается обратно в контроллер.

     public IQueryable<Story> FindAllStories(){
        var stories = (from s in db.Stories
                       orderby s.DateEntered descending
                       select new Story
                       {     
                          Title = s.Title,
                          StoryContent = s.StoryContent,
                          DateEntered =  s.DateEntered,
                          DateUpdated =  s.DateUpdated,
                          UserName = s.aspnet_User.UserName
                        }
                        );

        return stories;
    }

Когда помощник выполняет .count () на источнике, он бомбит со следующим исключением:

"Явное построение типа объекта 'MyWebsite.Models.Story' в запросе не допускается."

Есть идеи? Это не проблема с помощником, потому что у меня это работало, когда у меня просто было UserName внутри таблицы Story. И на заметку - есть ли в книге рекомендации по быстрому освоению LINQ to SQL? Это действительно пинает мою задницу. Благодаря.

Ответы [ 2 ]

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

Проблема именно в том, что она говорит вам: вам не разрешено использовать new Story в качестве результата вашего запроса. Вместо этого используйте анонимный тип (пропустив Story после new). Если вы все еще хотите Story, вы можете переназначить его позже в LINQ to Objects:

    var stories =  from s in db.Stories
                   orderby s.DateEntered descending
                   select new
                   {     
                      Title = s.Title,
                      StoryContent = s.StoryContent,
                      DateEntered =  s.DateEntered,
                      DateUpdated =  s.DateUpdated,
                      UserName = s.aspnet_User.UserName
                    };

     stories = from s in stories.AsEnumerable() // L2O
               select new Story
               {
                   Title = s.Title,
                   StoryContent = s.StoryContent,
                   ...
               };
0 голосов
/ 10 октября 2009

Если вам действительно нужно вернуть IQueryable из вашего метода и все еще нужно имя пользователя пользователя, вы можете использовать DataContext.LoadOptions для загрузки ваших объектов aspnet_user.

См. Этот пример.

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