2011-03-11 52 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。

相关问题