我有一个表。从那个表我选择行基于表的关键字段。这次我根据键'search'从数据库中选择行。所以我在我的数据表中有以下行。
Id |关键|价值| assignedvalue
1次搜索次数10
4搜索名约翰
6个搜索频道20
我声明了3个变量
int count,channels;
string name;
我想将相应的值分配给该表中的上述变量。
即,我必须从数据表中获取值,如下所示
count=10,
channels= 20
name=John
我该怎么做?
答案 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强制查询重新枚举。