2010-10-16 30 views
28

Tôi là thương hiệu mới với LINQ và đang cố gắng truy vấn DataSet của mình bằng nó. Vì vậy, tôi đã theo dõi this example vào thư và nó không hoạt động.LINQ to DataSet, DataTable.AsEnumerable() không được công nhận

Tôi biết rằng DataTable cần .AsEnumerable cuối cùng nhưng không được nhận dạng bởi IDE. Tôi đang làm gì sai? Tôi có thiếu một tham chiếu/nhập khẩu không được hiển thị trong ví dụ (không phải là lần đầu tiên một ví dụ MSDN không hoàn toàn đúng), và nếu có, cái nào? Hay nó là cái gì khác hoàn toàn?

Sample Code:

Imports System 
Imports System.Linq 
Imports System.Linq.Expressions 
Imports System.Collections.Generic 
Imports System.Data 
Imports System.Data.SqlClient 
Imports System.Data.Common 
Imports System.Globalization 


//Fill the DataSet. 
Dim ds As New DataSet() 
ds.Locale = CultureInfo.InvariantCulture 
//See the FillDataSet method in the Loading Data Into a DataSet topic. 
FillDataSet(ds) 

Dim products As DataTable = ds.Tables("Product") 

Dim query = From product In products.AsEnumerable() _ 
      Select product 
Console.WriteLine("Product Names:") 
For Each p In query 
    Console.WriteLine(p.Field(Of String)("Name")) 
Next 

Các tài liệu tham khảo trong dự án của tôi là:

System 
System.Data 
System.Drawing 
System.Windows.Forms 
System.Xml 

Trả lời

74

Trong khi lớp tổ chức các phần mở rộng là trong không gian tên System.Data, nó nằm trong một hội đồng mà không được thêm vào dự án của bạn theo mặc định. Thêm một tham chiếu đến System.Data.DataSetExtensions vào dự án của bạn và nó sẽ ổn. Hãy nhớ rằng, ngay cả sau khi bạn đã thêm tham chiếu, bất kỳ lớp nào muốn sử dụng các phương thức mở rộng được định nghĩa trong lớp cũng sẽ cần phải có một câu lệnh sử dụng cho System.Data.

+0

Cảm ơn, điều đó hoạt động ngay bây giờ! Tôi đã xé tóc của tôi trên cái này. :) +1 cho tất cả mọi người cho System.Data.DataSetExtensions, nhưng bạn nhận được 'chấp nhận' cho lời giải thích tốt hơn nhiều. Cảm ơn một lần nữa. – GSTD

+0

Tại sao vẫn cần phải thêm câu lệnh sử dụng ngay cả khi nó đã được đưa vào tham chiếu của dự án? – Charmie

+0

@Charmie câu lệnh 'using' làm cho vùng tên có sẵn trong tệp/lớp. Bởi vì nó là một phương thức mở rộng, bạn không thể tham chiếu nó bằng cách sử dụng không gian tên đầy đủ (khi được sử dụng như một phần mở rộng) và do đó phải có không gian tên được bao gồm. – tvanfosson

8

Tôi nghĩ rằng bạn có thể cần thêm System.Data.DataSetExtensions Liên quan đến dự án của bạn trước khi AsEnumerable sẽ làm việc.

5

bạn cần một tham chiếu đến System.Data.DataSetExtensions

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