2014-01-05 97 views
0

我有一個DataTable,我已經將它轉換爲列表。我想知道如何查詢列表並創建ParentID爲空的新列表。在列表中選擇項目

DataTable myTable = new DataTable(); 
myTable.Columns.Add("ParentID", typeof(string)); 
myTable.Columns.Add("ID", typeof(string)); 
myTable.Rows.Add(null, "CEO"); 
myTable.Rows.Add("CEO", "FD"); 
myTable.Rows.Add("CEO", "CIO"); 

List<DataRow> lst = myTable.AsEnumerable().ToList(); 

我想是這樣的:

List<DataRow> topNodes = lst.Select("ID is null") 

感謝。

+0

你知道DataTable有一個Select方法,它可以完成你想要創建的列表嗎? http://msdn.microsoft.com/en-us/library/det4aw50%28v=vs.110%29.aspx –

+0

嗨 - 是的,我都用這個,但想在的DataRows – user1896017

回答

0

嘗試,假設你可以使用LINQ

var topNodes = lst.Where(l => (!(l.ID.HasValue))).ToList(); 

編輯:

我看看你的身份證是String,所以它應該是這樣的:

var topNodes = lst.Where(l => ID.IsNullOrEmpty()).ToList(); 

編輯:

列表是DataRow so:

var topNodes = lst.Where(row => row["ID"].IsNullOrEmpty()).ToList(); 

編輯:

您添加關於你想要做什麼的更多信息。如果你需要的是列表或DataRow,我會先過濾,然後抹上列出:

var topNodes = myTable.Select("ID is null").AsEnumerable().ToList(); 
+0

列表我的結果我得到一個「除非你需要的結構'DataTable'我建議使用'某些類型的數據IList'名稱ID不在當前上下文」錯誤 – user1896017

+0

存在'Class',那麼你可以使用LINQ操縱集合 –

0

你可以試試這個 - 搜索成一排,爲其內容爲空的所有細胞。請注意,在這種情況下(對於給定的輸入 - 的ParentId列是字符串類型)的行值必須被轉換爲字符串:

// get only those items where ParentId is null  
var topRows = myTable 
       .AsEnumerable() 
       .ToList() 
       .Where (row => string.IsNullOrEmpty(row["ParentID"].ToString())) 
       .ToList(); 

輸出(作爲數據行的列表)給定的輸入是:

ParentID | ID 
------------------- 
null  | CEO 
0

注意:請參閱原始帖子下的評論。

List<DataRow> lst = myTable.Select("ParentID is null").ToList(); 

編輯:我看到我的答案是非常相似的克里斯·伊萬諾夫的,但我的是一個有點簡單,不使用有毒var關鍵字,我建議在評論中首先使用Table.Select。所以,我會放棄它。