2013-05-05 42 views
1
  List<VideoInfo> vobj = new List<VideoInfo>(); 
     vobj = (from vid in db.VideoInfoes.Where(c => c.IsActive == true) 
       orderby vid.VideoId descending 
       select vid 
       ).ToList(); 
     return View(vobj); 

這是使用所有視頻信息的列表的原始查詢。 還有另一張名爲「個人資料」的表格,它具有我需要的個人資料圖片以及視頻信息。 所以通過EF上的一篇文章去後,我想出了一些像這樣的事情..嘗試在Entity Framework中加入兩個表時出現編譯錯誤LINQ查詢

vobj = (from vid in db.VideoInfoes.Where(c => c.IsActive == true) 
       select new 
       { 
       ProfileId = vid.ProfileId, 
       ProfilePictureUrl = vid.ProfileInfo.ProfilePictureUrl 
       } 
       orderby vid.VideoId descending 
       select vid 
       ).ToList(); 
     return View(vobj); 

簡檔是外鍵。但是,這甚至沒有編譯。它在大括號和orderby之後顯示紅色語法錯誤。

回答

1

你功能可以修正並使得更簡單如下:

return View(
    db 
    .VideoInfoes 
    .Where(videoInfo => videoInfo.IsActive) 
    .OrderByDescending(videoInfo => videoInfo.VideoID) 
    .ToList()); 

只要未配置db連接,您將能夠訪問列表中每個VideoInfoProfileInfo。或者您可以稍後使用另一個查詢與另一個上下文中的ProfileId屬性訪問其他ProfileInfo記錄。這取決於你想要對數據做什麼; (我不知道什麼View功能是幹什麼的,例如。)

例如:

// where 'data' was what was returned from the above query 
// and assuming the above 'db' connection is still open 
foreach (VideoInfo videoInfo in data) 
{ 
    ProfileInfo profileInfo = videoInfo.ProfileInfo; 

    // do something with profileInfo 
} 

// or if the connection was disposed: 
using (MyEFModel db = new MyEFModel()) 
    foreach (VideoInfo videoInfo in data) 
    { 
     int profileID = videoInfo.ProfileId; 
     ProfileInfo profileInfo = 
     db 
     .ProfileInfoes 
     .Single(row => row.ID == profileID); 

     // do something with profileInfo 
    } 
+0

真正的主 - 外鍵已經映射在DB ..我不知道我在想什麼......以前的查詢工作是正確的...它只是我必須深入一級,即VideoInfoModel.ProfileInfo.ProfilePictureUrl ...無論如何感謝所有的幫助.. – Scorpio 2013-05-05 04:09:28

2

,因爲你要訂購的財產在新select不包含你應該Select之前做OrderBy

var vobj = (from vid in db.VideoInfoes.Where(c => c.IsActive == true) 
     orderby vid.VideoId descending 
     select new 
      { 
      ProfileId = vid.ProfileId, 
      ProfilePictureUrl = vid.ProfileInfo.ProfilePictureUrl 
      } 
     ).ToList(); 

ASLO我覺得,如果使用lambda語法更舒適:

var vobj = db.VideoInfoes.Where(c => c.IsActive) 
      .OrderByDescending(c => c.VideoId) 
      .Select(c => new { 
       ProfileId = vid.ProfileId, 
       ProfilePictureUrl = vid.ProfileInfo.ProfilePictureUrl 
      }).ToList(); 
+0

是的,我想這..但vobj是類型VideoInfo的所以它不允許我這樣做ToList ..它說不能轉換匿名類型爲通用類型VideoInfo – Scorpio 2013-05-05 03:44:55

+0

@Scorpio:編輯,你不需要聲明'清單 vobj =新列表();'因爲vobj現在是匿名類型,使用'var'而不是 – 2013-05-05 03:48:26

+1

@Scorpio'select new'會將序列投影到匿名類型的枚舉中。如果你想要一個VideoInfo的枚舉,你應該像在最後一樣「選擇vid」。 (如果在這種情況下使用方法鏈語法,則甚至不需要select子句)。 – 2013-05-05 03:48:39

相關問題