2008-11-06 31 views
47

Digamos que tengo una serie como esta:¿Cómo agregar un campo de índice de LINQ resultados

string [] Filelist = ... 

Quiero crear un resultado LINQ que cada entrada tiene su posición en la matriz de esta manera:

Índice
var list = from f in Filelist 
    select new { Index = (something), Filename = f}; 

ser 0 para el 1r artículo, 1 para el segundo, etc.

¿Qué debo usar para la expresión Índice =?

Respuesta

113

No utilice una expresión de consulta. Utilice the overload of Select which passes you an index:

var list = FileList.Select((file, index) => new { Index=index, Filename=file }); 
+0

¿Cómo se hace esto en sintaxis SQL? – toddmo

+0

@toddmo: ¿Por "sintaxis sql" quiere decir "usar expresiones de consulta LINQ"? Si es así, no puedes. Si quiere decir "en SQL mismo", entonces no lo sé, sospecho que hay formas no portátiles de hacerlo. –

+0

Lo descubrí, gracias. Me refiero a esto: '(de GHCOPPADriverType controlador en policy.Drivers de GHCOPPADriverHistoryType driverHistory en driver.Rating_DrivingHistory seleccione (controlador: controlador, la historia: driverHistory)) .Elija ((t, i) => nueva DriverHistoryModel (t .history) {DriverId = t.driver.Id, Sequence = i + 1}); '. Así que tuve que salir de las expresiones de consulta para usar la sobrecarga 'Seleccionar'. – toddmo

0
string[] values = { "a", "b", "c" }; 
int i = 0; 
var t = (from v in values 
select new { Index = i++, Value = v}).ToList(); 
+2

¿Por qué ir a todos esos problemas en lugar de usar la versión provista por el framework? –

+13

Por favor, nunca hagas mutaciones dentro de las consultas de linq .... – yfeldblum

+1

¿Por qué no? Funciona. Usted tiene el control total de esta manera. Probablemente no haría esto yo mismo, pero esa es la pregunta que se hizo. – GeekyMonkey

Cuestiones relacionadas