2013-03-13 71 views
0

我有一个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.I之间有一个关系,从Gallery和Media中获取字段。我的结果目前看起来像这样。

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

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

我该怎么办?

+0

没有从你的问题中理解一件事......你可以通过提供样本输入和输出来使它更清楚一点吗? – MarcinJuraszek

+0

我想我知道你在说什么,请看下面的答案。 – Oliver

回答

0

选择之后,您的GalleryMedias源中无法使用字段,因为您已选择了一组不包含GalleryMedias源的匿名对象集合。

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

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) 
相关问题