如何查询数据表

Posted

技术标签:

【中文标题】如何查询数据表【英文标题】:How to query DataTable 【发布时间】:2020-12-03 18:10:43 【问题描述】:

我有一个这样的数据表:

column1 column2 column3
   a       b       c
   d       e       f 

我想获取单元格“e”的索引号,我写了这些

int[] indexrowcol = new int[2];
for (int i = 0; i < dt.Columns.Count ; i++)

    for (int j = 0; j < dt.Rows.Count; j++)
    
        if (dt.Rows[i][j] == "e")
        
            indexrowcol[0] = j; indexrowcol[1] = i;
        
    

如何用 LINQ 写同样的东西?谢谢。

【问题讨论】:

这能回答你的问题吗? Get row index in datatable from a certain column 【参考方案1】:

我不相信您正确实施了原始代码来获得您所追求的东西。但至少它或多或少清楚你想要做什么。这是一些可以完成它的注释链接代码。

var valToSearch = "e";

int[] indexrowcol = dt.AsEnumerable() // allows you to use linq
    .SelectMany((row,rix) => // like 'Select', but stacks up listed output
        row.ItemArray.Select( // ItemArray gets the row as an array
            (col,cix) => new  rix, cix, value = col.ToString() 
        )
    )
    .Where(obj => obj.value == valToSearch)
    .Select(obj => new int[]  obj.rix, obj.cix )
    .FirstOrDefault();

当我在以下 DataTable 上使用上述代码时,我得到了结果 [1,1],这与我在纠正撰写本文时存在的 i/j 反转时使用原始代码得到的结果相同.

var dt = new DataTable(); 
dt.Columns.Add("Column1");
dt.Columns.Add("Column2");
dt.Columns.Add("Column3");

DataRow rw = dt.NewRow();
rw["Column1"] = "a";
rw["Column2"] = "b";
rw["Column3"] = "c";
dt.Rows.Add(rw);

rw = dt.NewRow();
rw["Column1"] = "d";
rw["Column2"] = "e";
rw["Column3"] = "f";
dt.Rows.Add(rw);

您的原始代码不太正确的原因是您使用“i”表示列,使用“j”表示行,然后调用dt.Rows[i][j],这是倒退的。我强烈建议您的变量可以与它们关联的内容相匹配。这就是为什么我使用诸如colrowcix(列索引)和rix 之类的名称来保持直截了当。

在这种情况下,您可能还想输出除 int[2] 以外的其他内容。也许是一个类或结构,或者甚至只是将它作为一个匿名对象(摆脱我的查询的“选择”部分)。虽然我不知道你的最终用例,所以我会不理你。

【讨论】:

以上是关于如何查询数据表的主要内容,如果未能解决你的问题,请参考以下文章

如何将查询结果插入本地数据库

mysql如何批量查询大量数据

在DELPHI中如何在dbgrid 显示查询数据

如何在 OdbcCommand 中查询 c# 数据表

sql如何查询第一个数据

oracle查询出来的数据如何消除重复数据