2012-05-15 30 views
5

tôi phải chọn cột cụ thể từ việc sử dụng DataTable tôi LINQ Tôi đang sử dụng mã nàyLàm thế nào để chọn cột specfic trong LINQ?

ds.Table[0].AsEnumerable().Where<DataRow>(r=>r.Field<int>("productID")==23).CopyToDataTable(); 

~

Nhưng nó đem lại cho tôi tất cả các cột và tôi chỉ cần PRODUCTNAME, mô tả, giá

Tôi có thể viết truy vấn này bằng cách nào?

Trả lời

4

Để mở rộng một chút trên @lazyberezovsky, bạn có thể sử dụng một loại vô danh dự để có được tất cả các lĩnh vực mà bạn muốn:

ds.Table[0].AsEnumerable() 
    .Where<DataRow>(r => r.Field<int>("productID") == 23) 
    .Select(r => new { ProductName = r.Field<string>("productName"), 
         Description = r.Field<string>("description"), 
         Price = r.Field<decimal>("price") }); 

Tôi không biết tên gì và gõ tên sản phẩm, mô tả, và trường giá là, vì vậy bạn sẽ phải thay thế các trường đó.

+0

Cảm ơn nó hoạt động. Bạn có câu hỏi của tôi claerly và câu trả lời của bạn là câu trả lời cho câu hỏi của tôi. Tôi đã biết cách thể hiện một lĩnh vực nhưng không biết cách hiển thị 3 – user1390378

6

Sử dụng Chọn phương pháp:

ds.Table[0].AsEnumerable() 
      .Where<DataRow>(r=>r.Field<int>("productID")==23) 
      .Select(r => r.Field<int>("productID")); 

UPDATE: Trong trường hợp bạn cần phải chọn một vài cột, bạn có thể trở lại loại vô danh:

var query = from row in dt.ds.Table[0].AsEnumerable() 
      where row.Field<int>("productID")==23 
      select new { 
          ProductID = x.Field<string>("productID"), 
          Foo = x.Field<string>("foo") 
         }; 

Nếu bạn cần phải sao chép dữ liệu đó để bảng mới, bạn sẽ gặp vấn đề (CopyToDataTable yêu cầu thu thập các đối tượng DataRow). Xem How to: Implement CopyToDataTable Where the Generic Type T Is Not a DataRow để giải quyết vấn đề này.

+0

Bằng cách này tôi chỉ có thể chọn một cột nhưng tôi phải chọn 3 – user1390378

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