2010-07-07 22 views
7

Mam następujące Linq zapytanie:błąd LINQ - „NotSupportedException: nieobsługiwany przeciążenie wykorzystywane do operatora zapytania«Wybierz»”

var tmp = 
    from container in Container 
    join containerType in ContainerType on container.ContainerType equals containerType 
    where containerType.ContainerTypeID == 2 
    select new { ContainerID = container.ContainerID, TypeID = container.ContainerTypeID}; 

var results = tmp.Select((row, index) => new { row.ContainerID, row.TypeID, ContainerIndex = index }) 

jak jest, to działa prawidłowo. Jeśli dodam następujące, więc mogę zobaczyć wyniki w LINQPad, pojawia się błąd opisany w tytule tej wiadomości:

results.Dump(); 

Ten błąd nie jest błędem LINQPad, to pochodzące z Linq i I don nie rozumiem, co to znaczy.

Dziękuję.

+0

Zobacz również mój komentarz do odpowiedzi Jona do poprzedniego pytania. –

Odpowiedz

15

Okay, nie zdałem sobie sprawy, że Container było źródłem danych LINQ do SQL, od którego należy zacząć. Zasadniczo nie można przekonwertować drugiej projekcji na SQL.

Więc, chcesz zrobić po prostu nieco w .NET zamiast - można zmusić go do używania Enumerable.Select z AsEnumerable:

var results = tmp.AsEnumerable() 
       .Select((row, index) => new { row.ContainerID, row.TypeID, 
               ContainerIndex = index }); 
+0

Przykro mi, powinienem był o tym wspomnieć. Dzięki za pomoc. –

+0

Napotkano na te same problemy, a użycie '.AsEnumerable()' również działa. +1. Ale dlaczego to działa? Dlaczego z 'System.Data.Linq.Table ' Nie mogę iterować/wybrać nowego obiektu? – markzzz

+0

@markzzz: Chodzi o to, gdzie nastąpi projekcja. Mimo że jest to zapytanie, prosisz o to, aby wszystko, co robisz, zostało przekonwertowane na SQL ... podczas gdy po "AsEnumerable", oznacza to, że wszystko zostało zrobione lokalnie. –