2012-02-02 36 views
5

由於某些原因,我無法更改查詢,因此我必須在C#中執行此操作。從通用列表中刪除一個屬性/列

我有一個類:

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

我得到的數據是在此列表中獲取。現在我想要從具有null值的列表中刪除這些屬性。我聽起來可能瘋了,但你讀得對。我想創建另一個列表只有選定的屬性,但上述任何屬性可以是null。所以我必須設計一個機制來根據這個過濾我的列表。

爲了更清楚考慮下面的例子。

List<myClass> lstClass = some data source. 

獲取數據的泛型列表後(lstClass)看起來像this.Consider結果表中的設置:除去屬性後

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

可我一些如何讓我的列表看起來像這樣SDATE。 因此,我想創建的新列表應該只有三個屬性。

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

任何想法?我可以使用Linq來做到這一點嗎?

PS:這有什麼好做的介紹。我沒有一個網格,我無法隱藏那些不是我正在尋找的列。

+1

你的問題很不清楚 - 結果你說的是什麼樣的列表並不明顯。如果你想使你的C#代碼有效並使其遵循.NET命名約定,那麼它也會有所幫助。 – 2012-02-02 10:28:39

+1

當然,這與你如何顯示給定數據有關,而不是你有什麼數據? – 2012-02-02 10:30:31

+0

我將編輯帖子,關於命名約定,我準備了一個虛擬示例以反映場景。 – ankur 2012-02-02 10:31:21

回答

15

假設你有MyClass的實例的泛型列表,你可以只用所需的屬性創建一個匿名類型:

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匿名類型進行營救。 – 2012-02-02 10:35:24

+2

@ M4N,但我不知道哪一列將是空白的,所以我不能硬線。你能提供一個例子,你首先確定必須在匿名類中傳遞的列名的塊。 – ankur 2012-02-02 10:45:05

0

我不知道,你應該能夠解決您的問題的數據,而是它的演示問題。 你想在哪個控件中顯示它?假設您使用AutoGenerateColumns = True在DataGrid中顯示它,那麼您可以1)在列/屬性上循環2)爲每個列/屬性查看所有行的所有屬性值是否爲空,如果是這樣,則將列的可見性設置爲摺疊。 如果您自己生成列,則更簡單:只在所有行的內容不爲空時添加列。
如果您的數據庫內容是動態的,那麼您可能希望將每行的可見性綁定到一個屬性,該屬性將指出該屬性的所有行是否爲空。取決於你想要代碼的通用性,這些代碼可能會有很大的不同,如果你想要通用的解決方案,使用Reflection來獲取/獲取/設置屬性可能有些用處。

+0

不,這並非如此。 – ankur 2012-02-02 10:54:01

+0

你傾聽別人的建議以獲得解決方案的能力令人印象深刻。 – GameAlchemist 2012-02-02 14:22:53