2010-07-13 37 views
5

Tôi đang cố gắng phân biệt trên nhiều cột và lấy datarows từ datatable. nhưng bị lỗi.nhận các hàng riêng biệt từ datatable bằng cách sử dụng LINQ (khác biệt với các cột mulitiple)

Dim query As IEnumerable(Of DataRow) = 
      (From row As DataRow In SourceTable.AsEnumerable() _ 
      Select row.Field(Of String)("ColumnName1"), 
        row.Field(Of String)("ColumnName2")).Distinct() 

dưới đây lỗi:

Unable to cast object of type '<DistinctIterator>d__7a`1[System.String]' 
to type 'System.Collections.Generic.IEnumerable`1[System.Data.DataRow]'. 

Tôi muốn một DataTable với hàng riêng biệt dựa trên các cột cho từ SourceTable.

+0

bạn có thể sử dụng sự hỗ trợ riêng biệt trong DataTable - http://social.msdn.microsoft.com/forums/en-US/adodotnetdataset/thread/ed9c6a6a-a93e-4bf5-a892-d8471b84aa3b/ToTable() có quá tải cho phép bạn chỉ định có trả về các giá trị riêng biệt hay không và đối số chuỗi tham số [] để chỉ định cột nào bạn muốn trong bảng mới. –

Trả lời

4

Hãy thử một trong này sau đó

Dim query = From q In (From p In dt.AsEnumerable() Select New With {.col1= p("ColumnName1"), .col2 = p("ColumnName2")}) Select q.col1, q.col2 Distinct 
+0

Cách sử dụng đối tượng 'truy vấn'. Ý tôi là Làm thế nào để lặp lại điều đó? – James123

0

Hãy thử điều này (một chút của một đoán về một phần của tôi):

Dim query As IEnumerable(Of DataRow) = 
     (From row As DataRow In SourceTable.AsEnumerable().Distinct() _ 
     Select row.Field(Of String)("ColumnName1"), 
       row.Field(Of String)("ColumnName2")) 
+0

gặp lỗi tương tự khi thực hiện truy vấn của bạn – James123

+0

Ah shit Tôi nên chú ý hơn đến thông báo lỗi. Tôi đã có nó ngay bây giờ. Vấn đề của bạn không phải là cú pháp SQL của bạn - đó là kiểu dữ liệu bạn mong đợi vì bạn đang đánh dấu nó như là một tập hợp đầy đủ các DataRows khi bạn đang chiếu các bộ dữ liệu chứa một cặp chuỗi. – Aaronontheweb

+0

Thay đổi cú pháp, do đó bạn đang chiếu một DataRow mới với mỗi chuỗi được thêm vào dưới dạng cột - có thể là dải hoặc Như là IEnumerable (Of DataRow) và chỉ chấp nhận loại kết quả. – Aaronontheweb

0

Hãy thử điều này

var distinctRows = (from DataRow dRow in dTable.Rows 
        select new col1=dRow["dataColumn1"],col2=dRow["dataColumn2"]}).Distinct(); 

này là trong C#. Convert nó sang vb.net

+0

Bạn đang thiếu một dấu ngoặc nhọn ở phía trước của chiếu LINQ của bạn, nhưng tôi nhận được ý nghĩa của bạn. – Aaronontheweb

+0

Cái này không cố định lại các cột riêng biệt – James123

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