我只是想知道将某些项目放在列表顶部的列表中的最佳方法。此模型用于显示搜索结果的视图,并作为List<T>
来自控制器。所以我的目标是显示所有项目,但具有特定属性的项目将转到列表的开头,以便首先显示它们。
所以我的控制器会是这样的:
List<Item> listFromRepository = repository.GetSearchResults();
List<Item> topItems = listFromRepository
.Where(x => x.Subject == 5) // any filter for items to be at top of search results
List<Item> listForView = new List<Item>();
listForView.AddRange(topItems);
listForView.AddRange(listFromRepository.Exclude(x => x.Subject == 5));
return Json(listForView);
答案 0 :(得分:5)
可能这个: -
List<Item> topItems = listFromRepository.Where(x => x.Subject == 5)
.Concat(listFromRepository.Where(x => x.Subject != 5));
答案 1 :(得分:0)
Linq中还有一个OrderBy
函数。在这种情况下,您可以按主题按降序排序。
listFromRepository.OrderByDescending(x => x.Subject)
答案 2 :(得分:0)
也许你想要这个:
var listForView = listFromRepository.GroupBy(x => x.Subject == 5)
.OrderByDescending(g => g.Key).SelectMany(g => g);
如果SelectMany乱七八糟,我添加了OrderBy。 这比其他可能的查询更整洁,更快。
答案 3 :(得分:0)
试试这个
listFromRepository.OrderBy(x => x.Subject != 4).ToList();