使用where子句从数据表中获取特定值

本文关键字:获取 数据表 where 子句 使用 | 更新日期: 2023-09-27 18:06:59

我想从DataTablequery一个特定的值。

假设我有一个DataTable,它包含两列:

  • id
  • 项目名称

现在我想做的事情就像我用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" ?
}

使用where子句从数据表中获取特定值

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());
}

您可以直接在数据表上使用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"));
}

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