使用linq表达式从每个相册中获取一个图像

本文关键字:获取 图像 一个 表达式 linq 使用 | 更新日期: 2023-09-27 18:16:02

我有两个表AlbumImages。下面是它们的结构。

相册

AlbumId      int      
AlbumName    nvarchar

图像

ImageId      int
ImageUrl     nvarchar
AlbumId      int [Foreign Key]
ImageDesc    nvarchar

我试图从每个相册中提取一张图片[Any images],并使用LINQ将其显示为相册的封面照片。我真的不知道基于每个相册只获取一个图像,因为它需要一些连接操作[但不确定],并且我对LINQSQL 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();

使用linq表达式从每个相册中获取一个图像

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();
}

上面的示例将按相册对图像进行分组,然后为每个相册选择第一个图像。