2013-05-08 19 views
6

desidero ottenere solo il primo disco mi rendo conto della "Take() non funzionerà.Ottenete il primo elemento nella lista dalla query LINQ

Così ho un elenco che interroga un altro elenco

List<string> etchList = new List<string>(); 
etchList.Add("709"); 

La query LINQ è

var query = (from vio in AddPlas 
      where etchList.Any(vioID => vio.Key.Formatted.Equals(vioID)) 
      select new 
      { 
       EtchVectors = vio.Shapes 
      }).ToList().Take(1); 

Ora questo "Take (1)" funziona solo se avessi avuto altri dati in etchList, quindi non è quello che sto cercando. I risultati che sto ottenendo assomigliare questo:

formattati
"clinesegs" 1.013,98 5.142,96 "LYR3_SIG2"
"clinesegs" 1.020,16 5.168,33 "LYR3_SIG2"
"clinesegs" 967,03 5.151,31 "LYR3_SIG2"
"clinesegs" 971,43 5.174,01 "LYR3_SIG2"

Auguro per ottenere solo tornare prima fila" nella lista dei

"clinesegs" 1013.98 5142.96 "LYR3_SIG2" 

EDIT:

Ok questo codice esiste:

public class AddPla 
{ 
public AddPla() 
{ 
    Shapes = new List<Parse>(); 
} 

public Parse Key { get; set; } 
public Parse Pla { get; set; } 
public Parse Angle { get; set; } 
public Parse Default { get; set; } 
public List<Parse> Shapes { get; set; } 
public Parse DoubleBrace { get; set; } 
public Parse Number1 { get; set; } 
public Parse Number2 { get; set; } 
    } 

    public class Parse 
    { 

public string Formatted { get; set; } 
public string Original { get; set; } 

    } 

Allora questo elenco

var AddPlas = new List<AddPla>(); 
+0

Spiacenti, non ero 't cercando di "nascondere" qualsiasi codice, semplicemente non ho postato originariamente pensando che non fosse così importante, ma vedi come Shapes è una lista tipo –

+0

Quindi, aspetta, vuoi ottenere il primo 'Forme 'da ogni' AddPla'? – gunr2171

+0

Sì, mi dispiace per quello .... –

risposta

11

Non credo che sia così facile come First()?

Se vi aspettate che la query non restituirà alcun risultato, utilizzare FirstOrDefault()

Aggiornamento

Se quello che stai chiedendo è "Get il primo Shapes da ogni AddPla", quindi aggiungere il First al vostro select dichiarazione, piuttosto che alla fine

select new { EtchVectors = vio.Shapes.First() } 
+0

Oppure 'FirstOrDefault()' se dovrebbe * non * lanciare. –

+0

@TobiasBrandt, grazie, aggiornato. – gunr2171

+0

First e FirstOrDefault mi danno entrambi tutti e 4 ancora formattati "clinesegs" 1013.98 5142.96 "LYR3_SIG2" "clinesegs" 1020.16 5168.33 "LYR3_SIG2" "clinesegs" 967.03 5151.31 "LYR3_SIG2" "clinesegs" 971,43 5.174,01 "LYR3_SIG2" –

5

Si può provare con 01.239..

var query = (from vio in AddPlas 
      where etchList.Any(vioID => vio.Key.Formatted.Equals(vioID)) 
      select new 
      { 
       EtchVectors = vio.Shapes 
      }).FirstOrDefault(); 
+2

Non c'è bisogno di chiamare 'ToList()', 'FirstOrDefault()' può operare sul grezzo 'IEnumerable ' bene. – dlev

+0

ohh sì @dlev, l'ho perso, grazie ho modificato. – Sachin

+0

ancora ottenere tutte le 4 formattati "clinesegs" 1013.98 5142.96 "LYR3_SIG2" "clinesegs" 1020.16 5168.33 "LYR3_SIG2" "clinesegs" 967.03 5151.31 "LYR3_SIG2" "clinesegs" 971,43 5.174,01 "LYR3_SIG2" –

0

utilizzare il metodo FistOrDefault per restituire in modo sicuro il primo elemento dalla tua ricerca, o null se la query ha restituito alcun risultato:

o equivalentemente:

var result = AddPlas.Where(x => etchList.Any(y => x.Key.Formatted.Equals(y))) 
        .Select(x => new { EtchVectors = x.Shapes.FistOrDefault() }); 
+0

mi piace la sintassi di inizializzazione, ma la sintassi non funziona –

+0

@ChrisHamilton Spiacente, non ho visto la tua domanda aggiornata. Ho aggiornato la mia risposta in modo che corrisponda alle tue ultime specifiche. –

Problemi correlati