使用select语句从DataTable获取数据

时间:2014-02-05 07:37:24

标签: c# datatable

我的DataTable包含三列,名称,日期和DialedNumber 。我希望在DialedNumber列的基础上获取行,其电话号码如 03001234567 ...

我正在使用方法返回数据表返回类型是数据表。

{
DataTable dt = filldata();
}

问题是如何使用select语句获取编号为03001234567或其他电话号码的行?

5 个答案:

答案 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]);
    }
}

DataTable.Select Method

答案 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;