2013-10-01 8 views
5

Po prostu chcę wybrać 2 kolumny z MSSQL DB przy użyciu LINQ.Linq do SQL wybierz wiele kolumn

SQL powinny być

select table.col1,table.col2 from table 

Próbowałem

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

ale to nie działa.

Mówi

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

Kiedy mówisz, że to nie działa, co masz na myśli? Czy istnieje wyjątek? Czy nie zwraca nic lub czegoś innego, niż się spodziewasz? – TheEvilPenguin

+0

Uwaga: Twoja próba/próba zapytania LINQ nie wydaje się być zgodna z instrukcją "SQL should be". Być może mógłbyś wyjaśnić swój cel, a także faktyczny problem – Seymour

Odpowiedz

11

Jesteś w zasadzie stara się wypełnić listę ciągów z wpisów z listy anonimowych typów, które nie będą działać.

Czy próbowałeś coś takiego ?:

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

Następnie można łatwo używać wpisy w pętli np

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

Albo jak lista

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

Pierwszy wszystkich, lista łańcuchów (List<string>) może mieć tylko jeden ciąg w elemencie nie dwa (co próbując to zrobić) zmiana typu na var naprawiłaby wyjątek, ale nie była pewna, czy jest to rozwiązanie, które chcesz.

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

Można zaznaczyć kilka pól przy użyciu LINQ Wybierz jak pokazano powyżej w różnych przykładach ta powróci jako typ anonimowy. Jeśli chcesz uniknąć tego anonimowego typu, oto prosta sztuczka.

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

myślę, że to rozwiązuje problem