2010-03-31 193 views
0

該用戶已要求精確複製幾分鐘前sql and linq query翻譯SQL查詢LINQ

PhotoAlbums
ALBUMID
標題
日期

Photos表:
PHOTOID
標題
日期
ALBUMID

SELECT  AlbumID, Title, Date, 
          (SELECT  TOP (1) PhotoID 
          FROM   Photos AS c 
          WHERE  (AlbumID = a.AlbumID)) AS PhotoID 
FROM   PhotoAlbums AS a 

我需要這個查詢寫成LINQ到SQL。在此先感謝

+1

http://stackoverflow.com/questions/2552190/sql-and-linq-query – Fredou 2010-03-31 12:50:41

+0

可能的重複您是否意識到,當您通過子句提供沒有訂單時,TOP(1)的結果是不確定的?請參閱:http://stackoverflow.com/questions/1261625/sql-server-why-do-these-queries-return-different-result-sets – 2010-03-31 12:51:50

+0

您的查詢效率低下,因爲它必須運行不同的查詢來查找照片從PhotoAlbums返回的每一行。使用派生表並將PhotoAlbum添加到該表中會更好。 – 2010-03-31 12:53:27

回答

2

假設您已經定義在您的DBML文件PhotoAlbumsPhotos之間的關係,你可以這樣做:

var albums = dataContext.PhotoAlbums.Select(album => new { 
    AlbumId = album.AlbumId, 
    Title = album.Title 
    Date = album.Date, 
    PhotoId = album.Photos.Select(photo => photo.PhotoId).FirstOrDefault() 
}); 
+0

不錯,謝謝! – 2010-03-31 13:15:10

3

你可以這樣說:

var result = 
    yourContext.PhotoAlbums.Select(a => 
     new {a.AlbumId, a.Title, a.Date, a.Photos.First().PhotoId } 
    ); 

而且,LinqPad是一個非常好的工具,可以幫助你做到這一點。

+0

linqpad參考的+1。 – amelvin 2010-03-31 12:58:32