是否可以检索分组为列表列表的SQL结果

时间:2015-03-31 08:14:49

标签: c# sql entity-framework

我有以下3个表,如下所示,想要检索List>在C#中,每个List包含一个组中的所有图像。

可以使用Entity Framework(或SQL)完成此操作,还是必须迭代for循环并将它们分组到C#中?

enter image description here

2 个答案:

答案 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 
                                         }) 
             };