2009-10-09 3 views
1

내 문제는 개체 Story가 포함 된 간단한 쿼리를 반환하려고하는 것입니다. Story 객체에는 aspnet_users의 UserId 열에 링크되는 UserId가 테이블에 있습니다. Story에 대한 부분 클래스를 만들었습니다.이 클래스는 테이블 자체에 존재하지 않기 때문에 UserName 속성을 추가합니다.LINQ에서 SQL에 연결된 테이블에서 열 반환

다음 쿼리는 모든 이야기를 가져옵니다. 그러나 페이지 매김 도우미는 쿼리를 사용하고 컨트롤러에 다시 전달되면 필요한 것을 반환합니다. 도우미는 소스 다음을 제외하고 그것을 폭탄에 .count()하지

 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; 
    } 

". 엔터티 형식 'MyWebsite.Models.Story'쿼리의 명시 건설이 허용되지 않습니다"

아이디어가 있으십니까? Story 테이블에 UserName이있을 때만 작업했기 때문에 도우미와 관련된 문제는 아닙니다. 그리고 사이드 노트 - LINQ to SQL에서 속도를 높이기위한 모든 책 권장 사항은 무엇입니까? 그것은 정말 내 엉덩이를 걷어차. 감사.

답변

1

문제는 정확히 알려주므로 문의 결과로 new Story을 사용할 수 없습니다. 대신 익명 유형을 사용하십시오 (new 이후에 Story을 생략 함). 당신은 여전히 ​​Story을 원하는 경우에, 당신은 객체 나중에 LINQ에 다시 매핑 할 수 있습니다

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

당신이 eagerload하는 DataContext.LoadOptions를 사용할 수있는 정말 방법에서 된 IQueryable을 반환해야하고 여전히 사용자의 사용자 이름이 필요한 경우 귀하의 aspnet_user 개체.

See this example.

관련 문제