2008-08-01 38 views
80

Tôi có một số DataTable với cột Name. Tôi muốn tạo ra một bộ sưu tập các tên duy nhất được sắp xếp theo thứ tự bảng chữ cái. Truy vấn sau bỏ qua mệnh đề theo mệnh đề.Làm cách nào để có được danh sách các tên riêng biệt, được sắp xếp từ một DataTable bằng LINQ?

var names = 
    (from DataRow dr in dataTable.Rows 
    orderby (string)dr["Name"] 
    select (string)dr["Name"]).Distinct(); 

Tại sao orderby không được thực thi?

Trả lời

29

Để làm cho nó dễ đọc hơn và dễ bảo trì hơn, bạn cũng có thể chia nó thành nhiều câu lệnh LINQ.

  1. Đầu tiên, chọn dữ liệu của bạn vào một danh sách mới, chúng ta hãy gọi nó x1, làm một chiếu nếu muốn
  2. Tiếp theo, tạo một danh sách riêng biệt, từ x1 vào x2, sử dụng bất cứ điều gì khác biệt bạn cần
  3. Cuối cùng , tạo ra một danh sách đặt hàng, từ x2 vào , sắp xếp theo bất cứ điều gì bạn mong muốn
50

Vấn đề là nhà điều hành Distinct không cấp rằng nó sẽ duy trì thứ tự ban đầu là giá trị.

Vì vậy, câu hỏi của bạn sẽ cần phải làm việc như thế này

var names = (from DataRow dr in dataTable.Rows 
      select (string)dr["Name"]).Distinct().OrderBy(name => name); 
1

Hãy thử như sau

var names = (from dr in dataTable.Rows 
      select (string)dr["Name"]).Distinct().OrderBy(name => name); 

này nên làm việc cho những gì bạn cần.

7
var sortedTable = (from results in resultTable.AsEnumerable() 
select (string)results[attributeList]).Distinct().OrderBy(name => name); 
3

Hãy thử các fo llowing:

dataTable.Rows.Cast<DataRow>().select(dr => dr["Name"].ToString()).Distinct().OrderBy(name => name); 
0

Để trừu tượng: tất cả các câu trả lời đều có điểm chung.

OrderBy cần phải là hoạt động cuối cùng.

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