从另一个实体中选择字段后使用Group By

时间:2013-03-13 09:13:48

标签: c# .net linq group-by

我有一个linq声明。

GalleryMedias
.Where(q => q.Gallery.Status == 1 && q.Media.Status == 1 && q.Media.MediaTypeId==1)
 .Select(q => new
{
   Id = q.Gallery.Id,
   Title = q.Gallery.Title,
   MediaTypeId = q.Media.MediaTypeId
 }
)
.OrderByDescending(q=>q.Id)

如您所见,GalleryMedias和Gallery之间存在关联。我从Gallery和Media中获取字段。我的结果目前看起来像那样。

Id  Title    MediaTypeId
355 record1  1
355 record1  1
354 record2  1
354 record2  1
353 record3  1

所以,我想在选择后按他们分组。但是字段不是来自GalleryMedias,所以我不能分组。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

选择后,GalleryMedias源中的字段不可用,因为您已选择了一组没有引用GalleryMedias源的匿名对象。

如果您要浏览所有其他GalleryMedias属性以便在GroupBy中使用它们,您可以执行类似以下示例的操作,其中GalleryMedias源对象在Select语句中被提取。

GalleryMedias
.Where(q => q.Gallery.Status == 1 && q.Media.Status == 1 && q.Media.MediaTypeId==1)
 .Select(q => new
{
   Id = q.Gallery.Id,
   Title = q.Gallery.Title,
   MediaTypeId = q.Media.MediaTypeId,
   GalleryMedia = q //Here you are including the GalleryMedia object in your annonymous object
 }
)
.GroupBy(g => g.GalleryMedia.Property) //You can now access the GalleryMedia's properties in the GroupBy
.OrderByDescending(q=>q.Id)