2010-03-31 148 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