假设我有3个菜单项。每个人都有(例如)内部的5个链接。所以我有这样的事情:
//This is just some test-code. normally i''ll get the data from a database
List<NavigationModel> navigation = new List<NavigationModel>();
Random randomInt = new Random();
for (int i = 0; i < 5; i++)
{
NavigationModel m = new NavigationModel();
m.MenuName = "Users";
m.LinkName = "Link (" + i + ")";
m.ControllerName = "AAA";
m.ActionName = "Function" + i;
m.SortingMenu = 5;
navigation.Add(m);
}
for (int i = 0; i < 5; i++)
{
NavigationModel m = new NavigationModel();
m.MenuName = "Help";
m.LinkName = "Link (" + i + ")";
m.ControllerName = "BBB";
m.ActionName = "Function" + i;
m.SortingMenu = 10;
navigation.Add(m);
}
for (int i = 0; i < 5; i++)
{
NavigationModel m = new NavigationModel();
m.MenuName = "Home";
m.LinkName = "Link (" + i + ")";
m.ControllerName = "CCC";
m.ActionName = "Function" + i;
m.SortingMenu = 2;
navigation.Add(m);
}
navigation = navigation.OrderBy(x => x.SortingMenu).ToList();
正如你所看到的,我会得到3个菜单项,排序正确但是我需要按0开始排序,然后是1,2 ...
如何在没有硬编码或数据库更新命令的情况下执行此操作?
答案 0 :(得分:3)
LukeHennerleys的回答可能是更高的标准,但我宁愿用简单的for-loop
更改SortingMenu的值。如果已经对列表进行了排序,这应该可以解决问题。
for (int i = 0; i < navigation.Count; i++)
{
navigation[i].SortingMenu = i;
}
答案 1 :(得分:2)
在调用Select
后使用OrderBy
来显示索引。 Select((x, i))
i
将成为您的索引。
public class TestObject
{
public string A { get; set; }
public int Index { get; set; }
}
public void Example()
{
List<TestObject> testObjects = new List<TestObject>();
testObjects.Add(new TestObject() { A = "B" });
testObjects.Add(new TestObject() { A = "C" });
testObjects.Add(new TestObject() { A = "A" });
var objects = testObjects.OrderBy(x => x.A).Select((x, i) => new TestObject() { A = x.A, Index = i });
}