【问题标题】:Using Group By after selecting fields from another entity从另一个实体中选择字段后使用 Group By
【发布时间】:2013-03-13 09:13:48
【问题描述】:

我有一个 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,所以我无法进行分组。

我该怎么做?

【问题讨论】:

  • 没有从你的问题中理解一件事......你能否让它更清楚一点,也许通过提供示例输入和输出?
  • 我想我知道你想说什么,请参阅下面的答案。

标签: c# .net linq group-by


【解决方案1】:

在 Select 之后,您的 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多