2009-10-09 44 views
1

我的問題是,我試圖返回一個包含對象Story的簡單查詢。 Story對象在表格中有一個UserId,它鏈接到aspnet_users的UserId列。我爲Story創建了一個部分類,它添加了UserName屬性,因爲它本身不存在。從LINQ中的鏈接表返回列到SQL

以下查詢獲取所有故事;然而,分頁助手會接收查詢,並只會在返回控制器時返回所需的內容。

 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’的顯式建築是不允許的。」

任何想法?這對助手來說並不是問題,因爲當我在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

如果你真的需要從方法返回一個IQueryable,仍然需要用戶的用戶名,您可以使用DataContext.LoadOptions到eagerload你的aspnet_user對象。

See this example.