2010-07-07 20 views
7

Aşağıdaki Linq sorgum var:Linq hatası - "NotSupportedException: Sorgu operatörü için kullanılan desteklenmeyen aşırı yük" Seç "

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 }) 

Olduğu gibi, bu iyi çalışıyor. Aşağıdakileri eklerseniz, sonuçları LinqPad'de görebilirim, bu iletinin başlığında açıklanan hatayı alıyorum:

results.Dump(); 

Bu hata bir LinqPad hatası değil, Linq'den geliyor ve Ne anlama geldiğini anlamıyorum.

Teşekkürler.

+0

Önceki sorunuza da Jon'un cevabı yorumumu görme: AsEnumerable ile Enumerable.Select kullanmaya zorlayabilirsiniz -

Yani, yerine .NET sadece bu düşeni yapmak istiyorum. –

cevap

15

Tamam, Container'un başlangıç ​​için SQL veri kaynağına LINQ olduğunu fark etmemiştim. Temel olarak, ikinci projeksiyonu SQL'e dönüştürme başarısız oluyor.

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

Üzgünüm, bundan bahsetmeliydim. Yardım ettiğin için teşekkür ederim. –

+0

Aynı sıkıntıyla da karşılaştım ve '.AsEnumerable()' kullanarak da çalışıyor. +1. Ama neden işe yarıyor? Neden System.Data.Linq.Table 'dan yeni nesne seçemiyorum? – markzzz

+0

@markzzz: Projeksiyonun nerede gerçekleştiği meselesi. Bu bir sorgulanabilir olsa da, SQL'e dönüştürülmek için ne yapıyorsun diye soruyorsun ... oysa 'AsEnumerable' kullandıktan sonra, her şey yerel olarak yapılmış demektir. –

İlgili konular