2013-10-01 7 views
5

Voglio solo selezionare 2 colonne da un DB MSSQL utilizzando LINQ.Da Linq a SQL selezionare più colonne

Lo SQL dovrebbe essere

select table.col1,table.col2 from table 

ho provato

IList<string> myResults = 
(
    from data in dbconn.table 
    where table.col5 == null 
    select new { 
     col1=data.Id.ToString(), 
     col2=data.col2 
    } 
).Take(20).ToList(); 

ma questo non ha funzionato.

Dice

cannot convert type list <AnonymousType#1> to Ilist<string> 
+1

Quando si dice che non funziona, che cosa vuoi dire? C'è un'eccezione? Non restituisce nulla o qualcosa di diverso da quello che ti aspetti? – TheEvilPenguin

+0

Nota: il campione/tentativo della query LINQ non sembra coerente con l'istruzione "SQL dovrebbe essere". Forse potresti chiarire il tuo obiettivo e il problema reale – Seymour

risposta

11

Si sono fondamentalmente tentando di compilare un elenco di stringhe con le voci di un elenco dei tipi anonimi, che non funzionano.

Hai provato qualcosa di simile ?:

var list = from data in dbconn.table 
      where table.col5 == null 
      select new { 
      col1=data.Id.ToString(), 
      col2=data.col2 
      } 

quindi è possibile utilizzare facilmente le voci in un ciclo per esempio

foreach(var element in list) { 
//... 
} 

O come un elenco

list.Take(20).ToList(); 
3

First di tutto, un elenco di stringhe (List<string>) può avere una sola stringa in un elemento non due (quello che a sta provando a fare qui) cambiando il tipo in var si risolverebbe l'eccezione ma non si è sicuri se questa è la soluzione che si desidera.

var myResults = 
(
    from data in dbconn.table 
    where table.col5 == null 
    select new { 
     col1=data.Id.ToString(), 
     col2=data.col2 
    } 
).Take(20).ToList(); 
3

È possibile selezionare più campi utilizzando linq Selezionare come illustrato in precedenza in vari esempi questo verrà restituito come tipo anonimo. Se vuoi evitare questo tipo anonimo ecco il trucco semplice.

var items = myResults.Select(f => new [] { f.Col1, f.Col2 }).SelectMany(item => item).Distinct(); 

penso che questo risolve il problema