【发布时间】:2021-03-12 13:22:39
【问题描述】:
我需要对我的查询结果进行分组。主要问题是当我使用 GroupBy 时,GroupBy 语句的返回类型是 IGrouping,这与我的方法的返回类型 List<MyViewModel> 不同。所以这两种类型不匹配。现在第一个选项是更改我的方法的返回类型。在这种情况下,如何在视图层(Razor 页面的 HTML 部分)中访问 ViewModel 的属性?
在不改变我的方法返回类型的情况下使用 GroupBy 有什么选择吗?
public List<MultimediaViewModel> Search(MultimediaSearchModel searchModel)
{
var query = _hContext.Multimedias.Include(x => x.Ceremony)
.Select(g => new MultimediaViewModel
{
Id = g.Id,
Title = g.Title,
CeremonyId = g.CeremonyId,
Ceremony = g.Ceremony.Title,
FileAddress = g.FileAddress,
}).AsEnumerable().GroupBy(g => g.CeremonyId).ToList();
if (!string.IsNullOrWhiteSpace(searchModel.Title))
query = query.Where(g => g.Title.Contains(searchModel.Title)).ToList();
if (searchModel.CeremonyId != 0)
query = query.Where(g => g.Key == searchModel.CeremonyId).ToList();
return query;
}
由于方法返回类型和Group by返回类型之间的差异,上面的代码不起作用。
【问题讨论】:
-
无法自动执行此操作。在 GroupBy 之后,您只有
IGrouping结果,稍后应重新映射。按 CeremonyId 分组有什么意义?在MultimediaViewModel中应该有适当的理由 -
对于每个不同的仪式 ID,可能有多个多媒体。你要哪一个?
-
对于每个仪式 ID,可能有多个多媒体。所以当我们要保存每一个多媒体项时,我们应该通过 CeremonyId 将它分配给仪式,CeremonyId 是多媒体模型中 Ceremony 模型的外键。
-
GroupBy有几个重载,其中一个返回IEnumerable<TResult>。使用提供所需返回类型的重载之一。 -
@Amin,最好用
MultimediaViewModel定义更新问题。
标签: c# entity-framework linq group-by