2010-11-04 32 views
8

Tôi chưa bao giờ sử dụng LINQ trước đây và tôi gặp lỗi trong một ứng dụng sử dụng nó. Đây là một VB.NET (.NET 2.0) dự án trong Visual Studio 2008.Nhập và tham chiếu bắt buộc để sử dụng LINQ

Dưới đây là mã vi phạm:

Dim orderedRows = From r In resultRows Order By r.FIELDNAME Select r 

Và đây là lỗi (tên đã thay đổi một cái gì đó chung chung, nhưng nếu không chính xác) :

Expression of type '1-dimensional array of 
Company.OurLibrary.FunctionalArea.Library.StoredProcStuff.USP_MYPROC.ResultRow' 
is not queryable. Make sure you are not missing an assembly 
reference and/or namespace import for the LINQ provider. 
C:\project\filename.vb 

Vì vậy, tôi nhận ra rằng tôi cần phải nhập thư viện LINQ. This link dẫn tôi thêm "Imports System.Linq" vào tệp, nhưng đó là một tham chiếu chưa được giải quyết. Dựa trên cùng một liên kết, tôi đã tìm tôi cần thêm tham chiếu đến "System.Core" vào dự án của mình, nhưng nó không được liệt kê như là một tùy chọn có sẵn khi tôi cố thêm một tham chiếu (cũng không phải là nó đã được kiểm tra).

Tôi cảm thấy chắc chắn mình đang thiếu một thứ gì đó cơ bản. Ai đó có thể chỉ cho tôi đi đúng hướng?

TL; DR: Tôi cần LINQ để làm việc?

+0

Vì vậy, nếu bạn đã có tập hợp mục tiêu được đặt thành .Net3.0 hoặc cao hơn, hệ thống có .NET 3.0 trở lên được cài đặt không? Nếu không, bạn không thể thêm nó vào tài liệu tham khảo dự án? – jcolebrand

+0

@drachenstern: Hệ thống có cài đặt .NET 3.5 và 4.0 cho vấn đề đó. Nhưng mục tiêu cho ứng dụng này là 3.5. – JosephStyons

+0

Ý của bạn là gì “VB.NET (phiên bản 2.0)”? Phiên bản VB được gửi đi với VB 2008 là VB 9, không phải 2 (VB2 chạy trên DOS). –

Trả lời

8

Cập nhật: dựa trên các ý kiến ​​nhắm mục tiêu NET 2.0 và cố gắng sử dụng System.Linq sẽ cho kết quả trong một lỗi biên dịch như sau:

Namespace or type specified in the Imports 'System.Linq' doesn't contain any public member or cannot be found.

Để thay đổi phiên bản khuôn khổ nhắm mục tiêu vào Properties của dự án - > Biên dịch -> Tùy chọn Biên dịch Nâng cao ... đặt Khung Nhắm mục tiêu thành "Khuôn khổ .NET 3.5" và biên dịch lại.

Trong trường hợp sử dụng .NET 3.5 là không khả thi thì bạn có thể sử dụng LINQBridge để tận dụng LINQ to Objects trong khi nhắm mục tiêu khuôn khổ .NET 2.0.

+0

@Ahmad Mageed: Cảm ơn lời khuyên. Tất cả ba trong số các Nhập khẩu cho tôi lỗi này: Không gian tên hoặc loại được chỉ định trong Nhập 'System.Linq' không chứa bất kỳ thành viên công khai nào hoặc không thể tìm thấy. Tôi không thấy System.Data.DataSetExtensions có sẵn để tham khảo, mặc dù tôi có tệp .DLL trên hệ thống của tôi tại "C: \ Program Files (x86) \ Tham chiếu Assemblies \ Microsoft \ Framework \ v3.5" – JosephStyons

+0

@ Joseph là bạn chắc chắn bạn đang xây dựng chống lại NET 3.5.? Đi đến thuộc tính của dự án của bạn -> Biên dịch -> Tùy chọn Biên dịch Nâng cao ... là Khung Nhắm mục tiêu được đặt thành "Khuôn khổ .NET 3.5"? –

+1

@Joseph Tôi đã có thể nhận được một thông báo giống hệt nhau bằng cách nhắm mục tiêu .NET 2.0 với 'Imports System.Linq'. Nhắm mục tiêu .NET 3.5 đã làm việc tốt cho tôi. Tại thời điểm này tôi khá chắc chắn 'System.Data.DataSetExtensions' là không liên quan đến vấn đề này. –

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