Domanda

Sto cercando di estrarre l'elemento n-esimo da un elenco di tipi anonimi restituiti da una query LINQ in cui n è un numero casuale compreso tra 0 e 100. Adesso non ci riesco e non ricevo in qualunque posto. Il mio codice (con i nomi modificati per proteggere l'IP):

var query = from Table1 t1 in theContext.Table1 
   join Table2 t2 in theContext.Table2
    on ... 
    where ... 
   select new 
   {
       partNum = t1.part_number, 
       partSource = t2.part_source
   }

int num = new Random().Next(0, 100); 

// here's where the code I've tried fails 

Posso in qualche modo fare un Take<T>(100).ToList<T>()[num] per ottenere un singolo tipo anonimo con partNum e partSource? Ho finito per risolverlo definendo esplicitamente un tipo, ma sembrava che mi mancasse una soluzione più elegante qui. Tutto quello che voglio fare è restituire un Dictionary<string, string> al chiamante, quindi preferirei non dover definire un tipo al di fuori di questo metodo.

Aggiorna : ElementAt non funziona per questo. Ho provato ad aggiungere:

// get a random part from the parts list
int num = new Random().Next(0, query.Count() - 1 );
var nthElement = query.ElementAt(num);

E ho ottenuto un'eccezione: The query operator 'ElementAt' is not supported.

È stato utile?

Soluzione

Dovresti essere in grado di usare:

var item = query.Take(100).ToList()[num];

Certo, sarebbe più efficiente fare:

var item = query.Skip(num).First();

Altri suggerimenti

Credo che tu voglia solo il metodo di estensione ElementAt :

var nthElement = query.ElementAt(num);

Non c'è bisogno di pasticciare con Take query o simili, e certamente non ToList.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top