Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get the ordinal position while creating selected Item in a LINQ expression

How can I get the ordinal position while creating selected Items in a LINQ expression? For example:

var alphaordinals = new string[] { "A", "B", "C", "D", "E" };  // etc.
var q = from car in datacontext.Cars
        select new InventoryItem
        {
            Name = car.Name,
            Price = car.Price,
            UIElement = "Car " + car.Id.ToString() + ???                        
        };
return q.ToList();

I want the InventoryItem.UIElement of the list of Cars to be like :

Car 27 A

Car 28 B

Car 31 C

Car 48 D

etc.

like image 699
Ash Machine Avatar asked Aug 02 '11 16:08

Ash Machine


1 Answers

Use the overload of Select which provides the index as well as the value. In this case I'd use AsEnumerable to get out of the database context, which isn't really where you want to be doing this work:

string[] alphaOrdinals = { "A", "B", "C", "D", "E" };
var query = dataContext.Cars
                       .AsEnumerable()
                       .Select((car, index) => new InventoryItem { 
                                  Name = car.Name,
                                  Price = car.Price,
                                  UIElement = string.Format("Car {0} {1}",
                                                            car.Id,
                                                            alphaOrdinals[index])
                               }).ToList();

(You can change alphaOrdinals to a string without any other change to the code, btw.)

like image 153
Jon Skeet Avatar answered Oct 26 '22 23:10

Jon Skeet