I feel like there is some silly syntax error going on here but I can't for the life of me figure it out. I am trying to sort a big list using multiple properties.
Method A:
IOrderedEnumerable<myClass> orderedList = myList.OrderByDescending(e => e.Tier);
orderedList = orderedList.ThenByDescending(e => e.Priority[0].Value);
orderedList = orderedList.ThenByDescending(e => e.Priority[1].Value);
orderedList = orderedList.ThenByDescending(e => e.Priority[2].Value);
orderedList = orderedList.ThenByDescending(e => e.Score);
Method B:
IOrderedEnumerable<myClass> orderedList = myList.OrderByDescending(e => e.Tier);
for (int i = 0; i < 3; i++)
{
orderedList = orderedList.ThenByDescending(e => e.Priority[i].Value);
}
orderedList = orderedList.ThenByDescending(e => e.Score);
The above Method A works perfectly, but Method B (the way I need to do it) keeps returning an index out of range error, even though it should be the exact same (i.e. 0, 1, 2)
In both instances e.Priority represents a list of 3 KeyValuePairs. I don't understand why Method B is returning an out of range error.
Heh, classic problem of loops here. Correct way to do it:
IOrderedEnumerable<myClass> orderedList = myList.OrderByDescending(e => e.Tier);
for (int i = 0; i < 3; i++)
{
int capturedIndex = i;
orderedList = orderedList.ThenByDescending(e => e.Priority[capturedIndex].Value);
}
orderedList = orderedList.ThenByDescending(e => e.Score);
More here: Captured variable in a loop in C#