如何将现有项目推送到列表的末尾?
我有一个团队名单。一个团队是这样定义的:如何将现有项目推送到列表的末尾?
public class Team
{
public int ID { get; set; }
public string Name { get; set; }
}
我查询与db.Teams.ToList()
数据库,它返回一个List<Team>
后,我需要推动该列表中的名称为“总”的球队之一的结束名单。我怎样才能做到这一点?
首先,你可以在查询直接做到这一点:
var list = db.Teams.OrderBy(t => t.Name == "Total" ? 1 : 0).ToList();
但如果你坚持的名单后做填充,然后你可以使用FindIndex
方法找到的总项目的索引(如果有的话),并使用RemoveAt
和Add
方法移动项目到最后:
var list = db.Teams.ToList();
int index = list.FindIndex(t => t.Name == "Total");
if (index >= 0 && index != list.Count - 1)
{
var total = list[index];
list.RemoveAt(index);
list.Add(total);
}
在后一种情况,如果你真的不关心列表中的其他项目的顺序,另一个更高效方式是t o只需将总数与最后一个元素进行交换:
if (index >= 0 && index != list.Count - 1)
{
var total = list[index];
list[index] = list[list.Count - 1];
list[list.Count - 1] = total;
}
我试过你的LINQ表达式,但没有奏效。 –
我假设你想在“视图”中显示团队总数或将其传递给其他服务。最好的模式是查询现有的List,并从中创建一个新的对象Team;但是要根据这个问题来实现结果 - 一旦List已经被填充,你可以插入带有Name = Total的新的Team对象,并且在Name属性上使用搜索来继续渲染它。希望你明白我的意思。 –
你是什么意思,它没有工作?你是否得到错误或不正确的结果?我会很惊讶,因为我正在做很多这样的查询没有问题。 –
获取列表并将您想要的那个移到最后一个索引。请注意,您不需要订购清单。说你的目标是在这种情况下2
:
List<int> list = new List<int>
{
0,
1,
2,
3,
4
};
// get the object o(n)
int tmp = list.IndexOf(2);
// remove it
list.RemoveAt(2);
// add it to the end of list
list.Add(tmp);
简短的回答:生成哈希码
请看看这个答案来自@乔恩飞碟双向 - https://stackoverflow.com/a/8094931/6830901
更简单的基础上,要求我理解:
在第一循环 请在
Team.Name != "Total"
查找和之后的循环已经结束,检查列表Team.Name == "Total"
放置
Team
的位置并不重要(考虑共享列表)。这取决于我们如何使用查询而不是注入对象的位置
你到底意味着什么?如果你的意思是下一个索引,这是它的默认行为 – Yar
为什么你不能在C#端或DataBase端对列表进行排序?您也可以删除该项目并将其重新插入到基于索引的列表中..还编辑问题并向我们显示项目在当前列表中的样子。 – MethodMan
@Yar到列表的末尾。我从数据库中检索团队列表。如果名为“Total”的团队位于该列表的中间,我想将其排序到该列表的末尾。 –