2010-07-07 32 views
7

Tôi có truy vấn LINQ sau:LINQ lỗi - "NotSupportedException: quá tải không được hỗ trợ sử dụng cho các nhà khai thác truy vấn 'Chọn'"

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

Như là, này hoạt động tốt. Nếu tôi thêm những điều sau đây, vì vậy tôi có thể xem kết quả trong LinqPad, tôi nhận được lỗi được mô tả trong tiêu đề của tin nhắn này:

results.Dump(); 

Lỗi này không phải là một lỗi LinqPad, nó đến từ LINQ, và tôi don không hiểu ý nghĩa của nó.

Cảm ơn bạn.

+0

Xem thêm nhận xét của tôi vào câu trả lời của Jon cho câu hỏi trước đó của bạn. –

Trả lời

15

OK, tôi đã không nhận ra Container là nguồn dữ liệu LINQ to SQL để bắt đầu. Về cơ bản nó không chuyển đổi phép chiếu thứ hai sang SQL.

Vì vậy, bạn muốn làm việc đó chút trong NET thay - bạn có thể buộc nó để sử dụng Enumerable.Select với AsEnumerable:

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

Tôi xin lỗi, tôi nên đề cập đến điều đó. Cảm ơn bạn đã giúp đỡ. –

+0

Tôi đã gặp phải sự cố tương tự, và sử dụng '.AsEnumerable()' cũng hoạt động. +1. Nhưng tại sao nó hoạt động? Tại sao từ một 'System.Data.Linq.Table ' Tôi không thể lặp lại/chọn đối tượng mới? – markzzz

+0

@markzzz: Đó là vấn đề nơi dự đoán diễn ra. Trong khi đó là một truy vấn, bạn đang yêu cầu cho bất cứ điều gì bạn đang làm để được chuyển đổi thành SQL ... trong khi sau khi bạn đã sử dụng 'AsEnumerable', nó có nghĩa là tất cả mọi thứ được thực hiện tại địa phương. –

Các vấn đề liên quan