使用linq表达式从每个相册中获取一个图像
本文关键字:获取 图像 一个 表达式 linq 使用 | 更新日期: 2023-09-27 18:16:02
我有两个表Album
和Images
。下面是它们的结构。
相册
AlbumId int
AlbumName nvarchar
图像
ImageId int
ImageUrl nvarchar
AlbumId int [Foreign Key]
ImageDesc nvarchar
我试图从每个相册中提取一张图片[Any images],并使用LINQ
将其显示为相册的封面照片。我真的不知道基于每个相册只获取一个图像,因为它需要一些连接操作[但不确定],并且我对LINQ
和SQL Queries
有非常基本的知识。我知道如何使用LINQ
从表中获取所有images
,这在这里可能是不重要的。
我有下面的Images表的模型类来映射。
ImageDateModel类
public class ImageDataModel
{
public string ImageUrl { get; set; }
public string ImageDescription { get; set; }
public string AlbumId { get; set; }
}
有人能帮我实现这一点吗?
更新
为了检索所有的图像,我只做
var images = (from img in db.tblImages select img).ToList();
var results = images.GroupBy(i => i.AlbumId).Select(albumGroup => new { AlbumId = albumGroup.Key, Image = albumGroup.First() })
请注意,您可以在不调用ToList的情况下将其链接到第一个查询,并且根据数据库提供程序的不同,它可以将其转换为数据库的查询语言,这样您就不必在进行分组之前将整个列表拉入内存。
我想你应该按相册对图像进行分组,然后选择每组中的第一个项目,如下所示:
class AlbumImage
{
public string AlbumId
{
get;
set;
}
public string ImageUrl
{
get;
set;
}
}
[TestMethod]
public void TestGetImages()
{
var results = new List<AlbumImage>
{
new AlbumImage { AlbumId = "1", ImageUrl = "123.png" },
new AlbumImage { AlbumId = "1", ImageUrl = "456.png" },
new AlbumImage { AlbumId = "1", ImageUrl = "789.png" },
new AlbumImage { AlbumId = "2", ImageUrl = "321.png" },
new AlbumImage { AlbumId = "2", ImageUrl = "654.png" },
new AlbumImage { AlbumId = "2", ImageUrl = "987.png" }
};
var imageResults = results.GroupBy(g => g.AlbumId).Select(grp => grp.First()).ToList();
}
上面的示例将按相册对图像进行分组,然后为每个相册选择第一个图像。