我的DataTable包含三列,名称,日期和DialedNumber 。我希望在DialedNumber列的基础上获取行,其电话号码如 03001234567 ...
我正在使用方法返回数据表返回类型是数据表。
{
DataTable dt = filldata();
}
问题是如何使用select语句获取编号为03001234567或其他电话号码的行?
答案 0 :(得分:0)
试试这个
private void GetRowsByFilter()
{
DataTable table = DataSet1.Tables["Table1"];
// Presuming the DataTable has a column named Date.
string expression;
expression = "DialedNumber ='03001234567 '";
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 ++)
{
Console.WriteLine(foundRows[i][0]);
}
}
答案 1 :(得分:0)
尝试此操作假设您有一个变量**string str**
,该变量具有您希望从该数据表中获取的电话号码,那么您可以使用此
{
DataTable dt = filldata();
DataRow[] resut = dt.Select("DialedNumber ='" + str + "'");
}
它将返回列 DialedNumber
中具有相同电话号码的行。答案 2 :(得分:0)
如果要从头开始过滤,而不是每次都获取所有表行,则应调整SQL语句:
SELECT * FROM Table WHERE DialedNumber = @dialedNumber
并在C#中使用SqlCommand.Parameters.AddWithValue(...)
将@dialedNumber
参数添加到查询中。
答案 3 :(得分:0)
您可以使用Linq to DataSet:
string number = "03001234567";
var rows = dt.AsEnumerable()
.Where(r => r.Field<string>("DialedNumber").Contains(number));
您甚至可以将行投影到强类型对象中:
var people = from r in dt.AsEnumerable()
where r.Field<string>("DialedNumber").Contains(number)
select new {
Name = r.Field<string>("Name"),
Date = r.Field<DateTime>("Date"),
DialedNumber = r.Field<string>("DialedNumber")
};
注意:如果您想检查所拨号码的完全匹配,请使用Contains(number)
代替== number
(相当于LIKE)。
答案 4 :(得分:0)
尝试像这样使用Linq到DataTable
var results = from myRow in dt.AsEnumerable()
where myRow.Field<String>("DialedNumber") == "03001234567"
select myRow;