2011-03-11 51 views
0

我有一張表。從那張表我選擇行基於表的關鍵字段。這次我從數據庫中選擇基於關鍵字'search'的行。所以我得到了跟在我的數據表中的行之後。從datatable中選擇一個特定的值-C#

Id |鍵|值| assignedvalue

1搜索計數10個

4搜索名稱約翰

6個搜索通道20

我已3個變量聲明

 int count,channels; 
     string name; 

我要分配的對應值,以該表中的上述變量。

即,像圖所示

count=10, 

channels= 20 

name=John 

我怎樣才能做到這一點我必須從數據表中的值?

回答

1

做你想做的一種方法是使用DataTable.Select方法。

使用此方法,您可以定義一個類似選擇查詢並將其應用於您的DataTable。您將返回與您的查詢匹配的DataRow對象數組。下面是一個示例,它適用於我鏈接的MSDN文章中的示例:

注意:我假設帶有名稱的DataColumn被稱爲NameColumn,並且具有要檢索的值的列被稱爲ValueColumn。

string expression; 
    expression = "NameColumn = 'John'"; 
    DataRow[] foundRows; 

    // Use the Select method to find all rows matching the filter. 
    foundRows = table.Select(expression); 

    // Print column 0 of each returned row. 
    for(int i = 0; i < foundRows.Length; i ++) { 
     // List out the retreived values. 
     Console.WriteLine(foundRows[i]["ValueColumn"]); 
    } 

但是,如果你確實想使用LINQ,你可以。見LINQ query on a DataTable

1

你是什麼意思「search count 10」?如果你想知道你有多少行dt.Rows.Count做這項工作。

如果列名是FirstName,那麼可以使用dr["FirstName"]來獲取該值。您可以遍歷並檢查值。

你是什麼意思「search selected All」?如果您想在「選定」列中找到一行值爲true,您可以檢查if ((dr["selected"] as bool? ?? false) == true)

嘗試改善您的問題。解釋你想達到什麼。如果你能提供表格模式,那將是一件好事。否則,像「搜索全選」這樣的東西沒有任何意義。

1

使用LINQ to DataSet爲您提供更好的類型安全性,更好的編譯時間檢查,並避免解析過濾器表達式的開銷。您還可以利用LINQ的延期執行來避免重寫每個任務的查詢。您可以考慮這樣的事情:與

var valueName = String.Empty; 
var query = 
    from r in dt.AsEnumerable() 
    where r.Field<string>("Value").Equals(valueName) 
    select r.Field<string>("AssignedValue"); 

valueName = "count"; 
var count = 0; 
int.TryParse(query.FirstOrDefault(), out count); 

valueName = "channels"; 
var channels = 0; 
int.TryParse(query.FirstOrDefault(), out channels); 

valueName = "name"; 
var name = query.FirstOrDefault(); 

在上面的示例中,我們的VALUENAME變量的值更改爲我們正在尋找在DataTable中然後強制查詢到的值的名稱重新枚舉致電FirstOrDefault。

相關問題