我有以下3个表,如下所示,想要检索List>在C#中,每个List包含一个组中的所有图像。
可以使用Entity Framework(或SQL)完成此操作,还是必须迭代for循环并将它们分组到C#中?
答案 0 :(得分:1)
Linq支持Group by
clausule。您可以通过这种方式(通过EF)进行检索:
var imagesGrouped = dbContext.ImageGroupImages
.Include("Image") // include image nav property
// if lazy loading is on
.GroupBy(imgGr => imgGr.ImageGroupId)
.ToList();
foreach (var group in imagesGrouped)
{
Console.WritLine("group: {0}, images: {1}",
group.Key,
string.Join(",", group.Select(img => img.Id)));
}
您还可以将其转换为列表列表:
var result = imagesGrouped.Select(group => group.ToList()).ToList();
但是在这种情况下你丢失了Key
,所以你不知道列表对应的是哪个组。
答案 1 :(得分:0)
使用LINQ
:
var result = from igi in imageGroupImages
join i in images on igi.ImageID equals i.ID
join ig in imageGroups on igi.ImageGroupID equals ig.ID
select new
{
ImageID = i.ID,
ImageUrl = i.Url,
GroupID = ig.ID,
GroupTitle = ig.Title
} into s
group s by new { s.GroupID, s.GroupTitle } into gr
select new
{
gr.Key.GroupID,
gr.Key.GroupTitle,
Images = gr.Select(c => new
{
c.ImageID,
c.ImageUrl
})
};