1

我想从query一个特定的值DataTable

假设我有一个DataTable包含 2 列的内容:

  • 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" ?
}
4

3 回答 3

3

query将是一个IQueryable<DataRow>,所以st将是一个DataRow。试试这个:

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

或者,如果您知道只有 item 带有 that 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());
}
于 2013-04-02T15:40:12.413 回答
2

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

var query = producten.AsEnumerable().Where(x => x.Field<string>("item_name") == test);
foreach (var st in query)
{
    MessageBox.Show(st.Field<int>("id"));
}
于 2013-04-02T15:49:43.403 回答
0

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

于 2013-04-02T15:39:16.190 回答