从datatable-C#中选择一个特定值

时间:2011-03-11 04:22:59

标签: c# linq

我有一个表。从那个表我选择行基于表的关键字段。这次我根据键'search'从数据库中选择行。所以我在我的数据表中有以下行。

  

Id |关键|价值| assignedvalue

     

1次搜索次数10

     

4搜索名约翰

     

6个搜索频道20

我声明了3个变量

        int count,channels;
        string name;

我想将相应的值分配给该表中的上述变量。

即,我必须从数据表中获取值,如下所示

count=10,

channels= 20

name=John

我该怎么做?

3 个答案:

答案 0 :(得分:1)

你是什么意思“搜索数10”?如果你想知道你有多少行dt.Rows.Count完成这项工作。

如果列名是FirstName,则可以使用dr["FirstName"]来获取值。您可以遍历并检查值。

你是什么意思“搜索全选”?如果您想在“已选中”列中找到值为true的行,则可以查看if ((dr["selected"] as bool? ?? false) == true)

尝试改善您的问题。解释你想要达到的目标。如果你能提供表格的架构会很好。否则“搜索所选全部”之类的内容没有意义。

答案 1 :(得分: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

答案 2 :(得分: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强制查询重新枚举。