2013-03-08 12 views
10

mój kod wygląda następującowybrać wiele elementów w rzędzie przy użyciu LINQ

var users = MyTable.AsEnumerable() 
         .Select(x => new { x.Field<string>("Col1"),x.Field<string> 
         ("Col2")}).ToList(); 

Na kompilacji otrzymuję

Nieprawidłowy anonimowego użytkownika typ declarator. Anonimowi członkowie typu muszą być zadeklarowani z przydziałem członków, prostą nazwą lub dostępem do członków.

Odpowiedz

15

Musisz podać nazwy do każdego z pól w anonimowym typu

var users = MyTable.AsEnumerable() 
    .Select(x => 
    new { Col1 = x.Field<string>("Col1"), Col2 = x.Field<string>("Col2")}) 
    .ToList(); 

Tylko raz nazwa anonimowego pola typu można pominąć jest, gdy sama ekspresja jest prosta nazwa kompilator może użyć. Na przykład, jeśli wyrażenie jest polem lub właściwością, wówczas można pominąć nazwę. W tym przypadku wyrażenie jest generic wywołanie metody i nie ma nazwy kompilator użyje

+0

można wyjaśnić, dlaczego proszę? – TalentTuner

+1

@Saurabh dodał wyjaśnienie – JaredPar

3

Spróbuj tego:

var users = MyTable.AsEnumerable() 
         .Select(x => new 
         { 
         Col1 = x.Field<string>("Col1"), 
         Col2 = x.Field<string>("Col2")}) 
         .ToList(); 
+0

czy możesz wyjaśnić, dlaczego? – TalentTuner

2

można użyć tej

var users = MyTable.AsEnumerable() 
         .Select(x => new 
         { 
         Col1 = x.Field<string>("Col1"), 
         Col2 = x.Field<string>("Col2")}) 
         .ToList(); 
Powiązane problemy