2
自从我上次使用内连接后,我已经有多年了,所以我有点生疏。 它有3个表Linq内部左连接返回结果太多
相册,AlbumsImages和用户
现在首先在我的仓库我内左加入专辑和AlbumsImages,事情是我唯一的冷杉封面说明,然后用id DESC要从albumsimages为了第一entery (在AlbumImages中可以有0张图片!)。在那之后,我是否会加入我的用户表,在相册中的用户ID上以用户身份登录。 我的问题是,我没有得到只有1张专辑,但每张图像在albumsImages,我只想要1的结果。 我在这里做错了什么?
public IQueryable<Album> Get()
{
return (from a in context.Albums
join i in _imageRepository.Get() on a.Id equals i.AlbumId into albumImages
from cover in albumImages.DefaultIfEmpty()
orderby cover.Cover descending, cover.Id ascending
select new Album()
{
Id = a.Id,
UserId = a.UserId,
Name = a.Name,
Created = a.Created,
LastEdit = a.LastEdit,
Description = a.Description,
Views = a.Views,
Location = a.Location,
Photoshoot = a.Photoshoot,
Cover = cover,
});
}
var albums = (from a in AlbumRepository.Get()
join u in UserRepository.Get() on a.UserId equals u.Id
orderby a.Id descending
select new AlbumDisplayModel()
{
Album = a,
User = u
}).ToList();
测试:
return (from i in _imageRepository.Get()
join album in context.Albums on i.AlbumId equals album.Id into albums
from a in albums.DefaultIfEmpty()
select new Album()
{
Id = a.Id,
UserId = a.UserId,
Name = a.Name,
Created = a.Created,
LastEdit = a.LastEdit,
Description = a.Description,
Views = a.Views,
Location = a.Location,
Photoshoot = a.Photoshoot,
Cover = i,
});
是的,我忘了补充一点,一张专辑可以有0个图像,我还是想有出专辑在该实例 – Androme 2013-03-26 21:17:56
@DoomStone然后用'DefaultIfEmpty' – mattytommo 2013-03-26 21:19:09
我改变你执行'into'第二查询不明白,你想要将用户表加入一个into和DefaultIfEmpty?总会有一个给定用户ID的用户! – Androme 2013-03-26 22:29:04