2012-02-02 55 views
5

Do một số lý do tôi không thể thay đổi truy vấn nên tôi phải thực hiện việc này trong C#.Xóa thuộc tính/cột khỏi danh sách chung

Tôi có một lớp:

public class myClass 
{ 
    int id { get; set; } 
    string name { get; set; } 
    DateTime sDate { get; set; } 
    bool status { get; set; } 
} 

Dữ liệu Tôi nhận được nạp trong danh sách này. Bây giờ những gì tôi muốn là để loại bỏ những thuộc tính từ một danh sách có giá trị null. Tôi nghe có vẻ điên rồ nhưng bạn đọc nó đúng. Tôi nghĩ đến việc tạo một danh sách khác chỉ với các thuộc tính đã chọn, nhưng bất kỳ thuộc tính nào ở trên có thể là null. Vì vậy, tôi phải đưa ra một cơ chế để lọc danh sách của tôi dựa trên điều này.

Để rõ ràng hơn, hãy xem xét ví dụ sau.

List<myClass> lstClass = some data source. 

Sau khi nhận được các dữ liệu trong danh sách chung (lstClass) trông giống như this.Consider tập hợp kết quả trong một bảng:

Id Name Sdate status 
1 a null null 
2 b null null 
3 c null false 

tôi một số có thể như thế nào làm cho danh sách của tôi trông như thế này sau khi gỡ bỏ tài sản sdate. Vì vậy, danh sách mới mà tôi muốn tạo nên chỉ có ba thuộc tính.

Id Name status 
1 a null 
2 b null 
3 c false 

Bất kỳ ý tưởng nào? Tôi có thể làm điều này bằng cách sử dụng LINQ?

PS: Điều này không liên quan gì đến bản trình bày. Tôi không có lưới nơi tôi không thể ẩn các cột không phải là những gì tôi đang tìm kiếm.

+1

Câu hỏi của bạn là rất không rõ ràng - nó không phải là ở tất cả rõ ràng những gì sắp xếp của danh sách bạn đang nói về kết quả. Nó cũng sẽ giúp nếu bạn làm cho mã C# của bạn hợp lệ và làm cho nó tuân theo các quy ước đặt tên .NET. –

+1

Chắc chắn điều này có liên quan nhiều hơn đến cách bạn hiển thị dữ liệu đã cho, trái ngược với dữ liệu bạn có? –

+0

Tôi sẽ chỉnh sửa bài đăng, liên quan đến quy ước đặt tên tôi đã chuẩn bị một ví dụ giả để phản ánh kịch bản. – ankur

Trả lời

15

Giả sử bạn có một danh sách chung của trường myClass, bạn có thể tạo một loại vô danh chỉ với các thuộc tính cần thiết:

List<myClass> list = ...; 
var reducedList = list.Select(e => new {e.id, e.name, e.status}).ToList(); 
// note: call to ToList() is optional 

foreach (var item in reducedList) 
{ 
    Console.WriteLine(item.id + " " + item.name + " " + item.status); 
    //note: item does not have a property "sDate" 
} 
+2

+1 Các loại ẩn danh để giải cứu. –

+2

@ M4N nhưng tôi không biết cột nào sẽ trống nên tôi không thể cố định nó. bạn có thể cung cấp một ví dụ mà trước tiên bạn xác định đoạn tên cột phải được chuyển trong lớp ẩn danh. – ankur

0

Tôi không chắc chắn, bạn nên giải quyết vấn đề của bạn trong dữ liệu, mà đúng hơn là nó một vấn đề trình bày. Bạn muốn hiển thị điều khiển nào? Giả sử bạn hiển thị nó trong DataGrid với AutoGenerateColumns = True, thì bạn có thể 1) vòng lặp trên cột/thuộc tính 2) cho mỗi cột/thuộc tính xem liệu tất cả các giá trị thuộc tính cho tất cả các hàng có null hay không. Nếu bạn tự tạo các cột của mình, nó thậm chí còn đơn giản hơn: chỉ thêm các cột khi nội dung không phải là rỗng cho tất cả các hàng.
Nếu nội dung DB của bạn là động, bạn có thể muốn ràng buộc khả năng hiển thị của mỗi hàng với thuộc tính có thể cho biết tất cả các hàng là null hoặc không cho thuộc tính đó. Tùy thuộc vào mức độ chung chung mà bạn muốn mã của mình, mã có thể rất khác nhau và trong trường hợp bạn muốn có giải pháp chung, sử dụng tính năng Phản ánh để lấy/nhận/đặt có thể là một số sử dụng.

+0

không có trường hợp này. – ankur

+0

khả năng của bạn để nghe lời khuyên của người khác để có được một giải pháp khá ấn tượng. – GameAlchemist

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