使用where子句从datatable获取特定值

时间:2013-04-02 15:36:50

标签: c# linq datatable where datarow

我想query来自DataTable的特定值。

假设我有DataTable,其中包含2列:

  • ID
  • ITEM_NAME

现在我想做的就像我用mysql做的那样:SELECT * FROM "DataTable" WHERE item_name = 'MyItemName'

然后获取属于'item_name'的ID ...

int blah;
while (MyReader.Read())
{
    blah = MyReader.GetInt32("id");
}

现在:我如何使用DataTable

执行此操作

我有一个片段,但我似乎无法在消息框中显示返回的值:

string test = Item1txt.Text;

var query = producten.Rows.Cast<DataRow>().Where(x => x.Field<string>("item_name") == test);
foreach (var st in query)
{
    MessageBox.Show(st.ToString());
    // how can i show the id that belongs to "test" ?
}

3 个答案:

答案 0 :(得分:3)

query将是IQueryable<DataRow>,因此st将是DataRow。试试这个:

foreach (var st in query)
{
    MessageBox.Show(st.Field<int>("id").ToString());
}

或者,如果您知道只有item_name的项目,这里的替代版本基本上是相同的,但可能更容易理解:

var st = producten.Rows.Cast<DataRow>().FirstOrDefault(x => x.Field<string>("item_name") == test);
if(item != null)
{
    MessageBox.Show(st.Field<int>("id").ToString());
}

答案 1 :(得分:2)

您可以直接在数据表上使用linq,而无需RowsCast

var query = producten.AsEnumerable().Where(x => x.Field<string>("item_name") == test);
foreach (var st in query)
{
    MessageBox.Show(st.Field<int>("id"));
}

答案 2 :(得分:0)

我通常使用数据表默认视图的Rowfilter属性,但我必须承认我自己从未做过LINQ,所以现在可能有更好的方法......