将一些项目放在列表<t> </t>中

时间:2014-12-18 06:27:11

标签: c# asp.net-mvc linq entity-framework

我只是想知道将某些项目放在列表顶部的列表中的最佳方法。此模型用于显示搜索结果的视图,并作为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);

4 个答案:

答案 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();