user14337993
user14337993

Reputation:

How to get Index of IEnumerable SelectList?

I want index from ViewBag and if not possible then From selectedlist but can't get it.

ViewBag.Lst_Fetch_Record = new SelectList(list.OrderBy(ITEM_CD => ITEM_CD));
int index = ViewBag.Lst_Fetch_Record.IndexOf("I1");

Upvotes: 0

Views: 1835

Answers (4)

user14337993
user14337993

Reputation:

Getting Index without using for loop

 var result2 = new SelectList(list.OrderBy(ITEM_CD=> ITEM_CD)).ToList();
 INT Index = result2.IndexOf(result2.Where(p => p.Text == a).FirstOrDefault());

Upvotes: 1

wesreitz
wesreitz

Reputation: 77

This will give you an ordered list with indexes

    List<string> selectListName = new List<String>();
    selectListName.Add("Ohio");
    selectListName.Add("Maine");
    selectListName.Add("Texas");
    selectListName.Add("Oregon");
    selectListName.Add("Alabama");

var result2  = selectListName.Select( (state, index) => new { index, state  
}).OrderBy(a=>a.state).ToList();        
    foreach(var b in result2)
{ 
  Console.WriteLine( b.index  + " " + b.state) ;
}

result:   If you re looking for the existing index
 4 Alabama
 1 Maine
 0 Ohio
 3 Oregon
 2 Texas

To use the result
Console.WriteLine(result2.FirstOrDefault(a=>a.state.Equals("Ohio")).index);
2
Console.WriteLine(result2.FirstOrDefault(a=>a.index.Equals(2)).state);
Ohio

To get this result: 
0 Alabama
1 Maine
2 Ohio
3 Oregon
4 Texas

 Order first, then index as shown below
   var result2  = selectListName.OrderBy(a=>a).Select( (state, index) => new { index, 
      state  }).ToList();       
    foreach(var b in result2) 
    {
      Console.WriteLine( b.index  + " " + b.state) ;
    }

Upvotes: 0

David Gerschcovsky
David Gerschcovsky

Reputation: 121

Check this example:

class Pet
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public static void OrderByEx1()
{
    Pet[] pets = { new Pet { Name="Barley", Age=8 },
                   new Pet { Name="Boots", Age=4 },
                   new Pet { Name="Whiskers", Age=1 } };

    IEnumerable<Pet> query = pets.OrderBy(pet => pet.Age);

    foreach (Pet pet in query)
    {
        Console.WriteLine("{0} - {1}", pet.Name, pet.Age);
    }
}

Source: Microsoft documentation

https://learn.microsoft.com/en-us/dotnet/api/system.linq.enumerable.orderby?view=net-5.0

Upvotes: 0

pedram asadipour
pedram asadipour

Reputation: 11

Use this method :

ViewBag.Lst_Fetch_Record.Select((item, index) => new 
{
       ...Your Code
}

Upvotes: 1

Related Questions