Laravel中控制器获取words表数据如何按字母数分组返回视图
实现方案
Controller 侧数据处理
你从数据源拿到words表的全量数据后,直接按countofletters字段分组,按需排序后将分组结果传递给视图即可,参考代码如下:
// 假设db是你的数据库上下文,Word是对应words表的实体类 List<Word> wordList = db.words.ToList(); // 按字母长度分组,OrderByDescending表示长单词在前,匹配你举例的先展示4字母单词、再展示3字母单词的顺序 var groupedResult = wordList .GroupBy(w => w.countofletters) .OrderByDescending(g => g.Key) .ToList(); // 将分组结果传入视图 return View(groupedResult);
如果你需要短单词在前展示,把
OrderByDescending换成OrderBy即可;如果需要组内单词按字母顺序排列,可以在分组后对每组内的元素追加OrderBy(w => w.word)逻辑。
View 侧渲染逻辑
视图侧遍历传入的分组集合,按要求输出标题、单词列表,非最后一个分组后插入分隔线即可,以Razor视图为例参考代码如下:
@* 强类型绑定传入的分组模型 *@ @model List<IGrouping<int, Word>> @for (int i = 0; i < Model.Count; i++) { var currentGroup = Model[i]; <h3>@currentGroup.Key letter words:</h3> @* 有序列表自动生成序号,匹配你要的1、2序号效果 *@ <ol> @foreach (var wordItem in currentGroup) { <li>@wordItem.word</li> } </ol> @* 最后一个分组后不插入分隔线,避免页面底部多出空分隔线 *@ @if (i != Model.Count - 1) { <hr /> } }
渲染后的效果和要求完全一致:先展示对应字母长度的标题,下方是带序号的单词列表,不同长度分组之间用水平分隔线隔开。
内容的提问来源于stack exchange,提问作者Rakan Selawi
相关产品推荐
相关产品推荐

