我想query
来自DataTable
的特定值。
假设我有DataTable
,其中包含2列:
现在我想做的就像我用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" ?
}
答案 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,而无需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"));
}
答案 2 :(得分:0)
我通常使用数据表默认视图的Rowfilter属性,但我必须承认我自己从未做过LINQ,所以现在可能有更好的方法......